2013-06-16 47 views
7

Tôi muốn hiển thị hộp thoại jQuery-UI dưới dạng cửa sổ bật lên khi người dùng nhấp vào nút chuột trái hoặc nút giữa. Nó hoạt động cho nhấp chuột trái (tôi nhận được hộp cảnh báo và sau đó bật lên) nhưng không hoạt động ở giữa (không phải hộp cảnh báo hay cửa sổ bật lên). Tôi đang thiếu gì?Phát hiện sự kiện nhấp chuột giữa jQuery

$('a.external').live('click', function(e){ 
    if(e.which <= 2) { 
    e.preventDefault(); 
    alert ("inside if"); 
    } 
    popUp.start(this); 
}); 
+0

thử trên Chrome, FF và IE10. –

Trả lời

15

Sử dụng mousedown hoặc mouseup thay vì click. Và (trừ khi bạn đang sử dụng một phiên bản rấtcũ của jQuery) sử dụng .on() thay vì .live():

$(document).on("mousedown", "a.external", function(e) { 
    if(e.which <= 2) { 
     e.preventDefault(); 
     alert ("inside if"); 
    } 
    popUp.start(this); 
}); 

... nơi lý tưởng bạn muốn sử dụng một yếu tố phụ huynh gần gũi hơn với các liên kết hơn document.

Demo: http://jsfiddle.net/7S2SQ/

+0

Tốt nhất, cảm ơn. –

+0

Tại sao bạn chuyển '" a.external "' làm dữ liệu cho trình xử lý sự kiện? Không phải anh ta sử dụng nó như là bộ chọn? – Nate

+3

@Nate - Tôi không chuyển '" a.external "' làm dữ liệu, đó là _is_ bộ chọn cho một sự kiện được ủy quyền. Hãy xem tài liệu ['.on()' (http://api.jquery.com/on/). Trong trường hợp này sự kiện mousedown bị ràng buộc với tài liệu, nhưng khi nó xảy ra, jQuery sẽ tự động kiểm tra nếu phần tử nguồn khớp với bộ chọn trong đối số thứ hai đó (và chỉ gọi hàm của bạn nếu nó khớp). Lý tưởng nhất là bạn sẽ không liên kết với tài liệu: như đã đề cập trong câu trả lời của tôi, lý tưởng nhất là bạn sử dụng phần tử cha gần với liên kết. – nnnnnn

3

Để có được điều này làm việc hoàn toàn trong Firefox (40.0.3), tôi đã phải thực hiện .on('mouseup', fn), như sau:

$(selector).on('mouseup', function (e) { 

    switch (e.which) 
    { 
     // Left Click. 
     case 1: 
      // By way of example, I've added Ctrl+Click Modifiers. 
      if (e.ctrlKey) { 
       // Ctrl+LeftClick behaviour. 
      } else { 
       // Standard LeftClick behaviour. 
      } 
      break; 

     // Middle click. 
     case 2: 
      // Interrupts "Firefox Open New Tab" behaviour. 
      break; 

     // Default behaviour for right click. 
     case 3: 
      return; 
    } 

    // Pass control back to default handler. 
    return true; 
}); 
+0

@nnnnnn, cảm ơn bạn đã chỉnh sửa. Tôi không biết làm thế nào tôi bỏ lỡ điều đó. : -S – Apache

+0

đưa tôi lứa tuổi để tìm lỗi đánh máy của bạn ... – Brandito

Các vấn đề liên quan