JQuery .on只对动态生成的元素触发一次

时间:2012-12-16 20:48:14

标签: javascript jquery

所以我有以下问题。我正在尝试将两个事件添加到一个复选框表中。

这是html的一个例子。

<body>
<div id='container'> //static element, everything beyond this element is dynamic
 <div id='pane_x'>
  <div id='bottom_x'>
   <div id='bottom_left_x'>
    <div id='results_x'>
     <div id='list_x'>
      <div id='table_1'>
       <table>
        <tbody>
         <tr>
          <td>
           <input type='checkbox' name='blah' id='blah_obj.id_x' class='blahblah'>
          </td>
         </tr>
        </tbody>
       </table>
      </div>
     </div>
    </div>
   </div>
  </div>
 </div>
</div>

我试图通过使用前缀选择器[id ^ =&#39; blah _&#39;]来选择复选框。我可以让代码适用于第一个窗格,即:pane_0,但它不会在pane_1或更高版本上启动。

jquery(document).on("change", "[id^='blah_" + obj.id + "']", function() {
//code here
});

可能存在嵌套错误,因为我只是对html进行了近似估计。奇怪的是我可以通过菊花链式.children()语句看到它们,但我无法选择输入元素。

由于评论不支持与此部分相同的代码块,因此我只需在此处添加:

jquery(document).on("change", ".checked", function() {
 var ids = jquery(this).attr("id").split("_");
 if (ids[0] === "blah")
  //do code
 }
});

为了清晰起见编辑了id。 id结构是&#34; blah _&#34; obj.id&#34; _&#34;个人迭代器。因此,窗格0上的3个复选框如下所示: blah_0_0 blah_0_1 blah_0_2

此页面上还有另外两组复选框列表,我不希望使用这些功能进行定位,这就是我使用前缀选择器的原因。

2 个答案:

答案 0 :(得分:1)

使用startsWith选择器的目的不是像obj.id那样尝试完成整个值,如果obj.id被定义的话。

以下内容会找到ID为input的所有'blah_',其中jQuery(document).on("change", "input[id^='blah_']", function() { //code here }); 以现有或未来为准。

jQuery(document).on("change", "input.blahblah", function() {
//code here
});

如果他们都共享一个共同的类

,那么使用类作为选择器会更有意义
jquery

另请注意,jQuery中的拼写错误应为{{1}},除非您在自己的代码中另有定义

重要提示如果您重复使用相同的复选框ID,则可能不会在页面中重复ID。根据定义,它们必须是唯一的

答案 1 :(得分:0)

这里是另一个样本:

$("body").on({
    click:function(){
        // where $(this) is the current item changed
    }
}, "input.blahblah");