触发下拉菜单的更改事件


86

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

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


您可能想放一些其他标签,例如javascript和jQuery,以获取更多信息

Answers:


184

我不太了解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()之前声明change事件处理程序,否则不会被触发。感谢您提到@LenielMacaferi。

更多信息在这里


13
您必须在调用之前trigger()或什change()至如本答案中正确显示的那样声明更改事件处理程序,也就是说,如果事件处理程序代码出现在调用之后,则什么都不会发生!:)
Leniel Maccaferri

3
@LenielMacaferi谢谢您为我节省了一两个小时。
Frank Nocke 2013年

@ChristopheEblé和Leniel Macaferi,非常感谢。克里斯托夫(Christophe),能否请您在回答中加上列尼(Leniel)的评论?
Zaxter 2015年

我使用.change()但jQuery 3.1.1却没有运气,在这篇文章发布之后,它按预期触发了。
Sorangwala Abbasali,2013年

这只是无休止地循环,每个人对此的解决方案都会循环。
内森·麦卡斯凯尔

12

试试这个:

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

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

回答原始海报可能迟到了,但是其他人可能会从速记符号中受益,并且这遵循了jQuery的链接等等。

jQuery链接


7

试试这个:

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

为我工作。

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


3
$('#id')。val(16).change(); 为我做了。
TomoMiha

1
谢谢@TomoMiha。在答案中添加了它。
d.popov '16

2

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

如果需要,这里是jQuery Ajax方法的文档。

$(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”的状态选择框周围有一个范围


我有级联下拉列表:<%= Html.DropDownList(“ MyCountries”,“ ---选择国家---”)%> <%= Html.CascadingDropDownList(“ MyStates”,“ MyCountries”)%>我可以设置MyCountries的值为$(“#MyCountries”)。val('<%= Model.CountryId%>'); 在$(document).ready中。但是我无法设置状态值,因为它仅显示一个选项“选择状态”,由于国家/地区级变更事件是级联的下拉菜单,因此应在国家/地区更改事件中填写该选项。这是实际问题。
普拉萨德

仍然不确定你要干什么。您是否要建立一个系统,让他们选择一个国家,然后将列表缩小到该国家的州?如果是这种情况,您将需要对服务器进行AJAX调用并发送选定的国家/地区,然后返回该国家/地区的州列表。

在添加用户个人资料的同时,我已将USA设置为Country并将Alabama设置为State,这是一个层叠的下拉列表。当我回到该页面以编辑字段时,我需要使用先前设置的值填充“国家和地区”。我没有添加用户配置文件的问题,当我返回到“编辑”页面时,我能够设置“国家/地区”下拉列表的值,并且在状态下拉列表中未填充该值,因为它是级联的,因此可以填充国家/地区值变更事件。为此,我需要触发国家的变更事件,以便充实国家,并可以设置国家
普拉萨德

为什么会这样呢?您知道页面加载时的国家/地区,因此可以使用正确的状态呈现正确的状态选择列表。当您更改国家/地区时,无论如何都会重新加载列表。

1

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

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

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

希望本文对您有所帮助,请注意,这段代码只是草稿,未经任何方面的测试。谢谢


当页面首次加载时(根据OP的问题),这不会触发更改事件

0

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

幸运的是,这个Vanilla JS解决方案triggerChangeEvent函数)确实起作用了:

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see /programming/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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.