JQuery clone()和append()

时间:2012-10-04 11:39:03

标签: jquery html dom clone

我有一张简单的表格:

<table id='table_actions'">
    <tbody class='actions_body'>
        <tr>
            <td colspan=2 class="taskname"><strong>1. </strong><span name='taskname'>name</span></td>
        </tr>
        <tr>
            <td>Действие: </td>
            <td>
                <select name='action_action'>
                    <option value="1">Consult</option>
                    <option value="2">Activate</option>
                    <option value="3">Connect</option>
                </select>
            </td>
        </tr>
        <tr>
            <td><button id='addaction' class="btn">Добавить действие</button></td>
            <td></td>
        </tr>
    </tbody>
</table>

和JQuery代码:

$('#addaction').click(function() {
    $('.actions_body tr:not(:last)').clone()
      .insertBefore($('#table_actions tr:last'));
});

$('select[name=action_action]').change(function() {
    alert();
});

我的问题:通过更改表格的克隆部分中的选择,没有提醒。

2 个答案:

答案 0 :(得分:4)

使用withDataAndEvents布尔参数:

$('.actions_body tr:not(:last)').clone(true)
  

.clone([withDataAndEvents])

     

withDataAndEventsA布尔值,指示是否应将事件处理程序与元素一起复制。

docs

答案 1 :(得分:1)

问题是因为更改事件绑定在页面加载上,并且克隆元素显然在那时不存在。您需要将事件处理程序委托给父级。试试这个:

$('#table_action').delegate('select[name=action_action]', 'change', function() {
    alert();
});

或者你可以将一个布尔参数传递给clone()来克隆带有附加事件的元素。