11 回答
TA貢獻1828條經驗 獲得超3個贊
從jQuery 1.7開始,你應該使用jQuery.fn.on:
$(staticAncestors).on(eventName, dynamicChild, function() {});在此之前,推薦的方法是使用live():
$(selector).live( eventName, function(){} );但是,live()在1.7中贊成使用on(),并在1.9中完全刪除。該live()簽名:
$(selector).live( eventName, function(){} );...可以用以下on()簽名替換:
$(document).on( eventName, selector, function(){} );例如,如果您的頁面是動態創建具有類名的元素,dosomething您可以將事件綁定到已存在的父項(這是問題的核心,您需要存在要綁定的內容,不要綁定到動態內容),這可能是(也是最簡單的選擇)document。雖然記住document可能不是最有效的選擇。
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'});綁定事件時存在的任何父級都可以。例如
$('.buttons').on('click', 'button', function(){
// do something here});適用于
<div class="buttons"> <!-- <button>s that are generated dynamically and added here --></div>
TA貢獻1982條經驗 獲得超2個贊
這是一個沒有任何庫或插件的純JavaScript解決方案:
document.addEventListener('click', function (e) {
if (hasClass(e.target, 'bu')) {
// .bu clicked
// Do your thing
} else if (hasClass(e.target, 'test')) {
// .test clicked
// Do your other thing
}}, false);這里hasClass是
function hasClass(elem, className) {
return elem.className.split(' ').indexOf(className) > -1;}歸功于Dave和Sime Vidas
使用更現代的JS,hasClass可以實現為:
function hasClass(elem, className) {
return elem.classList.contains(className);}TA貢獻1829條經驗 獲得超4個贊
您可以在創建對象時向對象添加事件。如果要在不同時間向多個對象添加相同的事件,則可能需要創建命名函數。
var mouseOverHandler = function() {
// Do stuff};var mouseOutHandler = function () {
// Do stuff};$(function() {
// On the document load, apply to existing elements
$('select').hover(mouseOverHandler, mouseOutHandler);});
// This next part would be in the callback from your Ajax call$("<select></select>")
.append( /* Your <option>s */ )
.hover(mouseOverHandler, mouseOutHandler)
.appendTo( /* Wherever you need the select box */ );TA貢獻1816條經驗 獲得超4個贊
您可以簡單地將事件綁定調用包裝到一個函數中,然后調用它兩次:一次是在文檔準備就緒,一次是在添加新DOM元素的事件之后。如果這樣做,您將希望避免在現有元素上綁定相同的事件兩次,因此您需要解除現有事件的綁定或(更好)僅綁定到新創建的DOM元素。代碼看起來像這樣:
function addCallbacks(eles){
eles.hover(function(){alert("gotcha!")});}$(document).ready(function(){
addCallbacks($(".myEles"))});// ... add elements ...addCallbacks($(".myNewElements"))TA貢獻1852條經驗 獲得超1個贊
我更喜歡使用選擇器并將其應用于文檔。
這將綁定在文檔上,并將適用于頁面加載后將呈現的元素。
例如:
$(document).on("click", $(selector), function() {
// Your code here});TA貢獻1828條經驗 獲得超4個贊
記下放置元素的“MAIN”類,例如
<div class="container"> <ul class="select"> <li> First</li> <li>Second</li> </ul></div>
在上面的場景中,jQuery將觀看的MAIN對象是“容器”。
然后,你將主要有元素的名稱下的容器,如ul,li和select:
$(document).ready(function(e) {
$('.container').on( 'click',".select", function(e) {
alert("CLICKED");
});
});添加回答
舉報
