如何将事件附加到选择框数组?

时间:2016-09-08 18:47:12

标签: javascript jquery

我有一个选择框数组,类“taskcompleted”。我希望能够在更换盒子时做点什么。

 <select class = "taskcompleted" >
   <option value="No">No</option>
   <option value="Yes">Yes</option>
 </select>

我使用过这个javascript代码

  function initselects() {
    var myselects = $('.taskcompleted');
    myselects.each( function(){ // any select that changes.
      console.log( $(this).val() );
    }).change();
  }

页面加载时,它会记录每个选择框的更改。我不希望这种情况发生。我只希望在页面加载后记录更改。

3 个答案:

答案 0 :(得分:1)

你的意思是这样的吗?这将为类taskcompleted

的所有选择添加更改处理程序

您遇到的问题是,您要将.change()添加到最终,这实际上会触发您不希望发生的变更 - 所以相反,只需听取它

function initselects() {
    $('select.taskcompleted').on('change', function() {
        // do something
   });
}

答案 1 :(得分:1)

您可以使用change()将事件附加到每个select,如下所示:

function initselects() {
    $('.taskcompleted').change(function() {
        console.log($(this).val());
    });
}

答案 2 :(得分:0)

如果您不想在页面加载时进行日志记录,则只需从末尾删除change()即可。 一般来说,你可以像那样使用它

JavaScript的:

var myselects = $('.taskcompleted');
myselects.change( function(){
  console.log($(this).attr('name') + ': ' +  $(this).val() );
});

HTML:

 <select name="1stselectbox" class = "taskcompleted" >
   <option value="No">No</option>
   <option value="Yes">Yes</option>
 </select>
 <select name="2ndselectbox" class = "taskcompleted" >
   <option value="Maybe">Maybe</option>
   <option value="dontknow">I don't know</option>
 </select>

因此,您可以直接在jQuery对象上设置更改侦听器,而无需使用循环(每个)。上面的例子甚至会打印选择了哪个选择框(可能有用)。例如。将第一个框更改为是时,输出为:1stselectbox: Yes

JSFiddle:https://jsfiddle.net/x8jwy92h/