1

我在 HTML 表单上有许多元素,类似于以下内容:

<div class="area">
    First Area
    <select class="area_select" name="area_25" id="form_area_25">
        <option value="0" selected="selected">No</option>
        <option value="1" >Don't Mind</option>
        <option value="2" >Yes</option>
    </select>
</div>

<div class="area">
    Second Area
    <select class="area_select" name="area_13" id="form_area_13">
        <option value="0" selected="selected">No</option>
        <option value="1" >Don't Mind</option>
        <option value="2" >Yes</option>
    </select>
</div>
    .... and many more

它们都有一个 area_select 类和 form_area_id 的 id,其中 id 是唯一的整数。

我正在尝试使用 jQuery 为用户更改选择框时编写事件处理程序。

到目前为止,我设法做到的是:

$(".area_select").change(function() {
  alert('select changed, but no idea which one');
});

有没有办法让事件处理程序确切地知道哪个选择是事件的来源?

4

5 回答 5

2

this在 even 中是指触发事件的控件:

$('.area_select').change(function(){
  // this = the control
});

这就是你的目的吗?或者您可以e在回调中接受并查看e.target.

$('.area_select').change(function(e){
  // e.target = the control (unless bubbling occurred)
});

event.target上的文档

如果您想获取选择的 ID(只是数字),您可以使用:

$(".area_select").change(function() {
    var selectid = this.id.match(/(\d+)$/)[1];
});
于 2013-04-11T15:32:02.653 回答
1

您可以使用thisfor source object 和this.idfor source object id

现场演示

$(".area_select").change(function(event) {
  alert(this.id);
});
于 2013-04-11T15:31:41.280 回答
1

您可以使用$(this)来获取触发事件的控件

$(".area_select").change(function() {
   alert($(this).attr("id") + " changed");
});
于 2013-04-11T15:33:39.023 回答
1

this是源。实际上,您绑定到事件的函数是在事件发生的项目的上下文中调用的。所以很简单:

$(".area_select").change(function() {
  alert('select ' + $(this).attr("id") + " changed");
});
于 2013-04-11T15:37:05.653 回答
1

我认为你需要this

$(".area_select").change(function() {
      alert('select changed: '+$(this).val()+' , but no idea which one: '
      +$(this).attr('id').replace('form_area_',''));
});
于 2013-04-11T15:42:27.570 回答