I am redesigning the select dropdown of a site and I am using a jQuery plugin called ddSlick. However, I can’t seem to capture a variable I need outside its function.
In the code below I can’t seem to have the second console.log(build)
show what I get in the first console.log(build)
. I get undefined
. What could I be doing wrong?
$(document).ready(function() { $("#demo-htmlselect").ddslick({ width: 300, selectText: "Select an item", onSelected: function(buildings) { let build = buildings.selectedData.value console.log(build); } }); $("#demo").ddslick({ width: 300, selectText: "Select an item", onSelected: function(noises) { let nois = noises.selectedData.value console.log(nois) console.log(build); } }); });
Advertisement
Answer
You need to define the build
variable in scope of both functions:
$(document).ready(function() { let build; // define here $("#demo-htmlselect").ddslick({ width: 300, selectText: "Select an item", onSelected: function(buildings) { build = buildings.selectedData.value; console.log(build); } }); $("#demo").ddslick({ width: 300, selectText: "Select an item", onSelected: function(noises) { let nois = noises.selectedData.value console.log(nois) console.log(build); } }); });
An important note here is that this logic relies on #demo-htmlselect
triggering a change
event before #demo
does. As such, you may need to write some validation logic to deal with this restriction.
With that in mind I would suggest combining the event handlers in to one and checking the state of both dropdowns in there, something like this:
$(document).ready(function() { $("#demo, #demo-htmlselect").ddslick({ width: 300, selectText: "Select an item", onSelected: doSomething }); function doSomething() { let build = $('#demo-htmlselect').val(); let noise = $('#demo').val(); // validate both variables have values here... // execute whatever business logic is required based on the user input here... } });