2011-01-12 28 views
20

Dựa trên biến số SomeCondition, tôi cần chặn sự kiện nhấp chuột vào nút và yêu cầu xác nhận, nếu họ nói ok, tiếp tục, nếu không hãy bỏ qua nhấp chuột.Đánh chặn sự kiện nhấp chuột vào nút, yêu cầu xác nhận, sau đó tiến hành

Vì vậy, một cái gì đó như:

if(SomeCondition) { 

// disable click on button 

var isOk = window.confirm("Are you sure?"); 

if(isOk) { 
     $("#button1").click(); 
} 

} 

Lưu ý: button1 đã được dây lên với một sự kiện nhấp chuột qua javascript từ một .js tập tin bên ngoài mà tôi không thể thay đổi.

Tôi cũng không biết sự kiện nhấp bị ràng buộc là gì, vì vậy tôi phải tắt nhấp chuột nếu Điều kiện một số là đúng, sau đó yêu cầu xác nhận, sau đó tiếp tục nhấp chuột.

Trả lời

38

Process isOK window.confirm của bạn trong chức năng của nút

$('#button1').click(function(){ 
    if(window.confirm("Are you sure?")) 
    alert('Your action here'); 
}); 

Vấn đề bạn sẽ phải là nhấp chuột đã xảy ra khi bạn kích hoạt của bạn "Bạn có chắc chắn" Calling preventDefault doesn' t ngừng thực hiện nhấp chuột gốc nếu đó là lần khởi chạy cửa sổ ban đầu của bạn.đã xác nhận.

Lỗi của vấn đề về gà/trứng.

Chỉnh sửa: sau khi đọc câu hỏi đã chỉnh sửa của bạn:

var myClick = null; 

    //get a list of jQuery handlers bound to the click event 
    var jQueryHandlers = $('#button1').data('events').click; 

    //grab the first jquery function bound to this event 
    $.each(jQueryHandlers,function(i,f) { 
     myClick = f.handler; 
     return false; 
    }); 

    //unbind the original 
    $('#button1').unbind('click'); 

    //bind the modified one 
    $('#button1').click(function(){ 
     if(window.confirm("Are You Sure?")){ 
      myClick(); 
     } else { 
      return false; 
     } 
    }); 
+0

Đây là những gì tôi đã viết. +1 – Stephen

+0

[0] đề cập đến điều gì? – Blankman

+0

@Blankman xin lỗi thói quen xấu (nếu có nhiều hơn một phần tử phù hợp thì bạn có thể lấy phần tử đầu tiên bằng cách đơn giản tham chiếu đến phần tử đầu tiên trong mảng đối tượng jQuery) –

2

Với jQuery để ngăn chặn mặc định, bạn chỉ return false:

$("#button1").click(function() { 
    //do your thing 
    return false; 
}); 
+3

Eh ... không thực sự. Điều này sẽ ngăn chặn bong bóng. – Stephen

+0

@ Stephen http://api.jquery.com/submit/ "chúng tôi có thể hủy hành động gửi bằng cách gọi .preventDefault() trên đối tượng sự kiện hoặc bằng cách trả về false từ trình xử lý của chúng tôi" – Skilldrick

+0

@Stephen 'return false;' thực sự ngăn chặnDefault và stopPropagation – Skilldrick

2

Đối với những ai đang tìm kiếm một giải pháp đơn giản (không đặc biệt đến đặc biệt điều kiện được đề cập ở đây)

Chỉ cần thêm thuộc tính này vào nút:

.... , onclick = "return confirm('are you sure?')" 

Khi hộp xác nhận trả về giá trị sai, sự kiện nhấp sẽ bị hủy. Lưu ý: Trình xử lý onclick được đề cập rõ ràng nội tuyến sẽ ghi đè mọi liên kết khác.

0

tôi không thể nhận được bất kỳ câu trả lời nào ở trên để làm việc sử dụng jquery 1.9.1

đây là những gì làm việc cho một thiết lập trước đó click kiện

var elem = $('#button1'); 
var oldClick = $._data(elem[0], 'events').click[0].handler; 
elem.off('click'); 

elem.click(function(){ 
    if(window.confirm("Are You Sure?")){ 
    oldClick(); 
    } else { 
    return false; 
    } 
}); 

rất giống với câu trả lời Jason Benson trên

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