2012-05-08 46 views

回答

1

是。從jQuery .one() docs

第二兩種形式,jQuery中引入1.7,是相同的。對()不同之處在於處理程序的第一次事件發生在委派元件之後去除,選擇是否匹配任何或不。例如:當執行代碼

$("#foo").one("click", function() { 
     alert("This will be displayed only once."); 
    }); 
    $("body").one("click", "#foo", function() { 
     alert("This displays if #foo is the first thing clicked in the body."); 
    }); 

後,元件上的點擊與ID foo將顯示警報。隨後的點擊不會執行任何操作。

這意味着,當你使用形式$(el).one('click', '.selector', handler)它會像live - 事件處理程序綁定到el(其在DOM存在),但該事件處理程序將只在點擊上執行無論您在撥打.one()時是否存在該元素,

編輯:看來,jQuery的這方面的文檔是錯誤的 - 至少,我解釋它的方式。根據上面的alert

「如果#foo是在主體中點擊的第一件東西,就會顯示」。

這讓我覺得,如果別的點擊體內第一,事件處理程序將被刪除,不會再次觸發。情況並非如此 - 事件處理程序將一直存在,直到單擊#foo

請參閱this fiddle進行演示。

4

是的,有:

// added in jQuery 1.7 
// .one(events [, selector] [, data], handler(eventObject)) 
$("div").one("click", "span", function (e) { 
    $(this).hide(); 
}); 
1

在完全相同的方式.on

$("#to-bind-to").one('event-type', 'delegated-selector', eventFunction); 
相關問題