0

我有一个简单的表:

<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();
});

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

4

2 回答 2

4

使用withDataAndEvents布尔参数:

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

.clone( [withDataAndEvents] )

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

文档

于 2012-10-04T11:40:06.917 回答
1

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

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

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

于 2012-10-04T11:41:43.193 回答