亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Jquery .on() 不工作或觸發兩次

Jquery .on() 不工作或觸發兩次

蕪湖不蕪 2023-07-29 16:21:36
所以不確定到底發生了什么,但可以做出一些猜測。我對 .on() 的理解是它意味著附加到所有動態添加的元素。但這里似乎不起作用。或者,如果我誤解了這一點,那么我的實施方式就行不通。在文檔加載時,我稱之為:$("#orderBox tbody tr").on( 'click', function ( e ) {    selectRow($(this));} )其中 selectRow() 在 tr 元素上切換類(代碼如下)。加載文檔時,表為空,因此通過 addTableRow() 函數添加新行,該函數只是將 tr 附加到 tbody。添加該 tr 后,單擊它不會執行任何操作。因此,我將 .on() 事件從文檔加載移至創建新行之后。function redrawOrderBox(){    $("#orderBox tbody tr").on( 'click', function ( e ) {        selectRow($(this));    } )}function selectRow(row){    row.toggleClass('selected');}function addTableRow(items){    newRow = "<tr>";    newRow += "<td class=\"hide\">"+items[0]+"</td>"    newRow += "<td>"+items[1]+"</td>"    newRow += "<td>"+items[2]+"</td>"    newRow += "<td>"+items[3]+"</td>"    newRow += "<td>"+items[4]+"</td>"    newRow += "<td class=\"hide\">"+items[5]+"</td>"    newRow += "<td class=\"hide\">"+items[6]+"</td>"    newRow += "<td class=\"hide\">"+items[7]+"</td></tr>";            $('#orderBox tbody').append(newRow);    redrawOrderBox();}這有點管用。該類似乎每隔兩行就會“成功”切換一次。添加三行后,根據我在檢查器中的判斷或粘貼警報()時,它在第三行成功觸發,然后在單擊時在第二行觸發兩次(看起來什么也沒發生)。在第一排,它發射了三次,給人的印象是它工作得很好。所以我多次調用 click 事件 - 可能是因為我附加了 3 次。但是如果我嘗試在文檔加載中使用它,則什么也不會發生。我打算做的是修改 redraw() 函數以在重新附加之前刪除單擊事件。但感覺這樣做的方式是錯誤的。最好的方法是什么?
查看完整描述

1 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

對于 jquery?on,您實際上需要 2 個選擇器:父選擇器和子選擇器。您可以使用on參數作為選擇器附加到父級,以確定觸發事件的后代。

使用這個代替:

$("#orderBox?tbody").on(?'click',?'tr',?function?(?e?)?{
????selectRow($(this));
}?)

現有的tr和動態添加的現在將正確觸發事件處理程序。


查看完整回答
反對 回復 2023-07-29
  • 1 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號