2012-03-12 38 views

Trả lời

44

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"); 
} 
+1

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

+2

@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

+1

@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 .. –

0

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.

2

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').

+0

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

1

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; 
    } 
}); 
Các vấn đề liên quan