触发下拉更改事件

我想使用 jquery 触发 $(document) . ready 中下拉列表的更改事件。

我有一个国家和州级联下拉列表在用户详细信息页面。如何使用 C # 在 MVC 中设置国家和州的值(基于用户 ID 从 DB 获取)。

203275 次浏览

If you are trying to have linked drop downs, the best way to do it is to have a script that returns the a prebuilt select box and an AJAX call that requests it.

Here is the documentation for jQuery's Ajax method if you need it.

$(document).ready(function(){


$('#countrylist').change(function(e){
$this = $(e.target);
$.ajax({
type: "POST",
url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit
data: { country: $this.val() },
success:function(data){
$('#stateBoxHook').html(data);
}
});
});


});

Then have a span around your state select box with the id of "stateBoxHook"

I don't know that much JQuery but I've heard it allows to fire native events with this syntax.

$(document).ready(function(){


$('#countrylist').change(function(e){
// Your event handler
});


// And now fire change event when the DOM is ready
$('#countrylist').trigger('change');
});

You must declare the change event handler before calling trigger() or change() otherwise it won't be fired. Thanks for the mention @LenielMacaferi.

More information here.

Try this:

$(document).ready(function(event) {
$('#countrylist').change(function(e){
// put code here
}).change();
});

Define the change event, and trigger it immediately. This ensures the event handler is defined before calling it.

Might be late to answer the original poster, but someone else might benefit from the shorthand notation, and this follows jQuery's chaining, etc

jquery chaining

Try this:

$('#id').change();

Works for me.

On one line together with setting the value: $('#id').val(16).change();

alternatively you can put onchange attribute on the dropdownlist itself, that onchange will call certain jquery function like this.

<input type="dropdownlist" onchange="jqueryFunc()">


<script type="text/javascript">
$(function(){
jqueryFunc(){
//something goes here
}
});
</script>

hope this one helps you, and please note that this code is just a rough draft, not tested on any ide. thanks

For some reason, the other jQuery solutions provided here worked when running the script from console, however, it did not work for me when triggered from Chrome Bookmarklets.

Luckily, this Vanilla JS solution (the triggerChangeEvent function) did work:

/**
* Trigger a `change` event on given drop down option element.
* WARNING: only works if not already selected.
* @see https://stackoverflow.com/questions/902212/trigger-change-event-of-dropdown/58579258#58579258
*/
function triggerChangeEvent(option) {
// set selected property
option.selected = true;
  

// raise event on parent <select> element
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
option.parentNode.dispatchEvent(evt);
}
else {
option.parentNode.fireEvent("onchange");
}
}


// ################################################
// Setup our test case
// ################################################


(function setup() {
const sel = document.querySelector('#fruit');
sel.onchange = () => {
document.querySelector('#result').textContent = sel.value;
};
})();


function runTest() {
const sel = document.querySelector('#selector').value;
const optionEl = document.querySelector(sel);
triggerChangeEvent(optionEl);
}
<select id="fruit">
<option value="">(select a fruit)</option>
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="pineapple">Pineapple</option>
</select>


<p>
You have selected: <b id="result"></b>
</p>
<p>
<input id="selector" placeholder="selector" value="option[value='banana']">
<button onclick="runTest()">Trigger select!</button>
</p>