Xét về hiệu suất, lợi ích (hoặc chỉ cần chênh lệch) giữa là gì:lợi thế jQuery/khác biệt trong .trigger() vs .click()
$('.myEl').click();
và
$('.myEl').trigger('click');
Có Bất kỳ ở tất cả?
Xét về hiệu suất, lợi ích (hoặc chỉ cần chênh lệch) giữa là gì:lợi thế jQuery/khác biệt trong .trigger() vs .click()
$('.myEl').click();
và
$('.myEl').trigger('click');
Có Bất kỳ ở tất cả?
This is the code for the click
method:
jQuery.fn.click = function (data, fn) {
if (fn == null) {
fn = data;
data = null;
}
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
như bạn có thể nhìn thấy; nếu không có đối số nào được truyền cho hàm, nó sẽ kích hoạt sự kiện nhấp chuột.
Sử dụng .trigger("click")
sẽ gọi một hàm ít hơn.
Và như @Sandeep chỉ ra trong mình answer.trigger("click")
là nhanh hơn:
As of 1.9.0 the check for data
and fn
has been moved to the .on
function:
$.fn.click = function (data, fn) {
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
Kiểm tra http://api.jquery.com/click/:
Trong biến thể thứ ba, khi .click() được gọi là không có đối số, nó là một phím tắt cho .trigger ("click").
Có vẻ như chúng giống nhau.
cho loại hiệu suất. Kiểm tra ở đây .. http://jsperf.com/trigger-vs-not-trigger Cả hai đều gần như giống nhau ... click() là viết tắt của trình kích hoạt ('bấm').
này không thực sự đúng. Nói rằng nó viết tắt sẽ ngụ ý rằng 'click()' được viết là 'jquery.fn.click = function() {return trigger (" click ")}', nhưng nó không phải (xem câu trả lời bởi @andlrc). Có một số mã chạy trước khi 'click()' có khả năng gọi 'trigger (" click ")', đó là một chờ đợi đủ lâu, rõ ràng, cho FireFox để xác định rằng sự kiện click được lập trình áp dụng, và sẽ không tôn trọng nó. 'trigger (" click ")' là một phần của giây nhanh hơn. Tôi chỉ chạy vào cùng một vấn đề được đề cập bởi @Graeck trong bình luận của họ, và bằng cách sử dụng 'trigger (" click ")' công trình, trong đó 'click()' thì không. – SeanKendle
tôi nghĩ rằng
$('.myEl').trigger('click');
là tốt hơn bởi vì nó giúp bạn tiết kiệm một cuộc gọi chức năng như $('.myEl').click();
chỉ gọi funciton đó. Nhìn vào mã nguồn từ jQuery
jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu").split(" "), function(i, name) {
// Handle event binding
jQuery.fn[ name ] = function(data, fn) {
if (fn == null) {
fn = data;
data = null;
}
return arguments.length > 0 ?
this.on(name, null, data, fn) :
//here they call trigger('click'); if you provide no arguments
this.trigger(name);
};
if (jQuery.attrFn) {
jQuery.attrFn[ name ] = true;
}
if (rkeyEvent.test(name)) {
jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
}
if (rmouseEvent.test(name)) {
jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
}
});
Chỉ cần thêm ... Gần đây tôi đã thử sử dụng .click() và nếu không thành công trong Chrome (hoạt động tốt trong FF và Safari). Tôi chuyển sang sử dụng .trigger ('click') và nó cũng làm việc trong Chrome. – Graeck
@Graeck Tôi chắc chắn rằng bạn có một sai lầm trong mã đó .... Nguyên nhân tất cả các điểm logic tại những gì bạn đang nói là vô nghĩa ... Xin lỗi .. – andlrc
@Graeck Tôi đã có điều tương tự xảy ra với tôi quá '.click()' là một lối tắt cho '.bind()' trong các phiên bản cũ hơn của jQuery, đó có thể là lý do tại sao .. –