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])

withDataAndEventsAイベントハンドラーを要素と一緒にコピーする必要があるかどうかを示すブール値。

ドキュメント

于 2012-10-04T11:40:06.917 に答える
1

問題は、変更イベントがページの読み込み時にバインドされ、複製された要素がその時点では明らかに存在しないためです。イベントハンドラーを親に委任する必要があります。これを試して:

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

または、ブールパラメータをclone()に渡して、イベントがアタッチされた要素のクローンを作成することもできます。

于 2012-10-04T11:41:43.193 に答える