所以不確定到底發生了什么,但可以做出一些猜測。我對 .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() 函數以在重新附加之前刪除單擊事件。但感覺這樣做的方式是錯誤的。最好的方法是什么?
Jquery .on() 不工作或觸發兩次
蕪湖不蕪
2023-07-29 16:21:36