jQuery .change()仅在第一次更改时触发

时间:2012-03-19 15:28:38

标签: javascript jquery html

这是我的代码:

$.each (t.config.industry, function (i, v) {
    $(v).change(function () {
        console.log("Industry change!");
    });
});

t.config.industry<select> ID的数组。 t.config.industry: ["#W2549_Sl", "#W2601_Sl", "#W2654_Sl"]我在页面上有几个<select>框,我正在跟踪它们。任何时候任何一个改变我想发射一些东西。

显然,我正在尝试做的不仅仅是console.log,但为了这篇文章,我将其限制在那里。在我的网站上,console.log仅在第一次更改时打印一次。在<select>下拉菜单的后续更改中,它不会触发。

之前有人见过这个吗?

注意:我根本无法更改HTML标记。

6 个答案:

答案 0 :(得分:4)

当多个选择元素的ID不唯一时,我见证了这种行为。为了解决我的问题,我只是删除了id,定义了一个类,并修改了jQuery选择器以使用指定的类。例如:

    <select class="some_value" some_id="<%= some[:id] %>">

    $(".some_value").change(function() {
        var some_id = $(this).attr("some_id");
        alert('some_id: ' + some_id);
    });

坦率地说,我认为这个行为是jQuery中的一个bug。为什么它应该成功运行一次并在此后失败?

答案 1 :(得分:1)

如果您可以为要监视的每个选择元素添加一个公共类,那么这将极大地简化您的代码。试试这个(on方法所需的jQuery 1.7):

$(document).on('change','select.monitorme', function() {
    console.log($(this).attr('id')+' changed!');
});

$.each (t.config.industry, function (i, v) {
    $(v).change(function () {
        $(this).addClass('monitorme'); // or just add the class to your markup
    });
});

答案 2 :(得分:0)

您需要在#(您的v)之前添加id才能使此选择器正常工作

$.each(t.config.industry, function (i, v) {
   $("#" + v).change(function () {
      console.log("Industry change!");
   });
});

答案 3 :(得分:0)

尝试以HTML

的方式重写它
        <select id="main_industry">
          <?foreach ($industry as $item ){?>
          <option value="<?=$item['id']?>"><?=$item['title']?></option>
          <?}?>
        </select>

JAVASCRIPT

   $('#main_industry').change(function() {
      // your stuff here
      console.log ($(this).val());
   }

答案 4 :(得分:0)

对于asp.net,它正确地在我的项目中工作。

<asp:DropDownList ID="txtvisitname" AutoPostBack="true" class="txtno" AppendDataBoundItems="true" 
    runat="server" onchange="return selectChange()">
    <asp:ListItem Text="--SELECT--" Value="0" />
    <asp:ListItem Text="VISIT1" Value="VISIT1" />
    <asp:ListItem Text="VISIT2" Value="VISIT2" />
    <asp:ListItem Text="VISIT3" Value="VISIT3" />
    <asp:ListItem Text="VISIT4" Value="VISIT4" />
    <asp:ListItem Text="VISIT5" Value="VISIT5" />
    <asp:ListItem Text="Unscheduled  VISIT" Value="Unscheduled  VISIT" />
</asp:DropDownList>

功能:

selectChange() {
    if ($("[id*=txtvisitname]").val() == "Unscheduled  VISIT") {
        $(".other").show();
    } else {
        $(".other").hide();
    }
}

答案 5 :(得分:-2)

您正在为每个选项设置您的听众。把它放在你的选择上!