下拉列表的触发更改事件

时间:2009-05-23 18:59:07

标签: jquery asp.net-mvc triggers

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

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

6 个答案:

答案 0 :(得分:170)

我不知道那么多JQuery,但我听说它允许用这种语法激活原生事件。

$(document).ready(function(){

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

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

您必须在调用trigger()或change()之前声明更改事件处理程序,否则不会触发它。感谢提及@LenielMacaferi。

更多信息here

答案 1 :(得分:12)

试试这个:

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

定义更改事件,并立即触发它。这可以确保在调用事件处理程序之前定义它。

可能会迟到回答原始海报,但其他人可能会从简写符号中受益,这跟随jQuery的链接等等

jquery chaining

答案 2 :(得分:3)

试试这个:

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

适合我。

在一行上设置值:  $('#id').val(16).change();

答案 3 :(得分:2)

如果您尝试链接下拉列表,最好的方法是使用一个脚本返回一个预先构建的选择框和一个请求它的AJAX调用。

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);
            }
        });
    });

});

然后在状态选择框周围加上id,状态为“stateBoxHook”

答案 4 :(得分:1)

或者你可以在下拉列表本身上放置onchange属性,onchange会像这样调用某些jquery函数。

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

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

希望这个可以帮到你,请注意这个代码只是草稿,没有在任何ide上测试过。感谢

答案 5 :(得分:0)

由于某种原因,此处提供的其他jQuery解决方案在从控制台运行脚本时可以使用,但是从Chrome Bookmarklets触发后,它对我不起作用。

幸运的是,this Vanilla JS solutiontriggerChangeEvent函数)确实起作用了:

/**
  * 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>