在jquery中动态添加元素的事件委托问题

时间:2014-01-09 11:59:12

标签: jquery

HTML

<table>
<tr>
    <td>Col</td>
    <td>:</td>
    <td>
        <input type="text" name="" class="check-input" />
        <span class="error-input"></span>
    </td>
    <td><button class="add-input">Click</button></td>
</tr>
</table>

JQUERY

$('.add-input').on('click',function(){
    $(this).closest('tr').after('<tr><td>Col</td><td>:</td><td><input type="text" name="" class="check-input" /><span class="error-input"></span></td><td></td></tr>');
});

$('.check-input').on('change',function(){
    $(this).next().text('Error');
});

http://jsfiddle.net/ch2FM/3/

我无法将事件绑定到动态创建的元素。我该怎么办?

3 个答案:

答案 0 :(得分:1)

试试这个

$(document).on('change','.check-input',function(){
    $(this).next().text('Error');
 });

DEMO

答案 1 :(得分:1)

你误解了事件授权。使用最近的div完成事件委派。这里我使用了文档但您可以使用最接近的div将其用作事件委派。

使用此:

$(document).on('change','.check-input',function(){
    $(this).next().text('Error');
 });

demo


这是了解event delegation

的链接

示例:

// attach a directly bound event
$( "#list a" ).on( "click", function( event ) {
event.preventDefault();
console.log( $( this ).text() );
});

// attach a delegated event
$( "#list" ).on( "click", "a", function( event ) {
event.preventDefault();
console.log( $( this ).text() );
});

答案 2 :(得分:1)

您需要为祖先元素分配on处理程序,例如document元素。然后,您可以指定要侦听的元素的确切选择器作为第二个参数:

$(document).on('change', '.check-input', function () {
    $(this).next().text('Error');
});

这基本上意味着:为change元素后代的所有.check-input元素倾听document事件。

Here is a working example