对于动态创建的元素,只绑定一次单击事件

bind a click event only once for dynamically created elements

本文关键字:绑定 一次 事件 单击 元素 于动态 动态 创建      更新时间:2023-09-26

更新:Fiddle示例

代码将通过选择框动态创建一个文本链接。如何将单击事件绑定到它一次,以便每个动态创建的链接只向表中添加数据一次。我尝试过.oneoff中的一种方法,但都不起作用。

代码:

 $(function (){
  $('.area').each(function(){
   var area = $(this),
       selectbox = area.find('select'),
       show = area.find('.show'),   
       dialog_open =  $(this).find(".dialog_open");

    selectbox.change(function(){
      selectbox = $(this).find('option:selected').text();
      show.html('<a href="#" onclick="javascript: return false" class="dialog_open">'+selectbox+'</a>')
    });
    var foo = function() {
    var dialog_open_text = $(this).find(".dialog_open").text();
      $('td').html(dialog_open_text);
    };
    show.on( "click",dialog_open, foo );
    show.off( "click", dialog_open, foo );
  });
});

HTML:

<div class="area">
    <select>
        <option>Choose</option>
        <option>One</option>
        <option>Two</option>
    </select>
    <div class="show">
    </div>
</div>
<div class="area">
    <select>
        <option>Choose</option>
        <option>One</option>
        <option>Two</option>
    </select>
    <div class="show">
    </div>
</div>
<table>
    <thead>
        <tr>
            <th>Title 1</th>
            <th>Title 2</th>
            <th>Title 3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>

更改

show.on( "click",dialog_open, foo );
show.off( "click", dialog_open, foo );

show.one( "click",dialog_open, foo );

jsFiddle

jQuery将附加一个事件处理程序,该事件处理程序在被调用一次后将自行分离。