2011-08-01 46 views
6

Tôi đã có một hộp văn bản có sự kiện tập trung vào sự kiện đó. bất cứ khi nào hộp văn bản bị mất tiêu điểm (Tab, nhấp chuột vào bất kỳ phần nào khác của biểu mẫu), dựa trên các điều kiện nhất định, chức năng người dùng viết sẽ làm mất cảnh báo được gọi.Jquery tập trung vào sự kiện

Bây giờ, biểu mẫu của tôi cũng có nút, sau khi điền vào hộp văn bản khi tôi nhấp vào tiêu điểm nútTự kiện của hộp văn bản được gọi thay vì sự kiện nhấp nút.

làm cách nào để dừng sự kiện foucusout của hộp văn bản được gọi khi nhấp vào nút?

("$textbox").focusout(function(){ 
validation; 
alert("message"); 
}); 

("$btn").click(function(){ 
---- 
}); 

bất kỳ ai có thể giúp tôi không?

+0

Bạn có thể cung cấp một số bối cảnh nhiều hơn? Nếu điều này là để xác nhận biểu mẫu thì cảnh báo về tiêu điểm của mỗi hộp văn bản có vẻ rất không cần thiết. Nếu nó chỉ là một bản tóm tắt mà bạn muốn hiển thị trước khi gửi biểu mẫu có những cách khác (tốt hơn) để đạt được điều này. – Town

+0

đây là một số loại xác nhận bổ sung, ngoài hình thức xác nhận bình thường cho một hộp văn bản được thực hiện trước khi gửi biểu mẫu. tôi cần phải hiển thị một hộp confrim cho người dùng trong khi anh ta bấm hoặc di chuyển đến texbox tiếp theo hoặc bấm vào bất kỳ đệ khác. –

Trả lời

0

Bạn không nhận được sự kiện kích hoạt sự kiện focusout theo sau là sự kiện nút click?

Có thể alert đang ngăn nút click hoàn tất.

Thử xóa alert để kiểm tra xem cả hai sự kiện có kích hoạt hay không.

Cập nhật:

Có lẽ một sự kiện mousedown sẽ làm việc thay vì click vì điều này sẽ đăng ký trên mousedown chứ không phải trên các sự kiện mouseup rằng click sẽ kích hoạt trên.

+0

Xin chào, cảnh báo bên trong tiêu điểm là bắt buộc. Chỉ sự kiện tập trung của hộp văn bản được gọi nhưng không phải là sự kiện nhấn nút.là có bất kỳ cơ hội để ngăn chặn sự kiện focusbox hộp văn bản để ngăn chặn từ được gọi là bấm vào nút. –

+0

Sự cố là 'focusout' sẽ xuất hiện trên' mousedown' của sự kiện nút 'click' nhưng nhấp vào nút có thể không xảy ra cho đến khi sự kiện 'mouseup' có thể bị cảnh báo dừng lại. Tôi chỉ đề nghị tạm thời xóa thông tin này để xác nhận xem đó có phải là nguyên nhân gây ra sự cố hay không. –

+0

tôi đã thử với sự kiện chuột xuống, nó không giúp tôi vẫn có thể nhận được cảnh báo tập trung ra .. tôi không muốn cảnh báo này được hiển thị. –

8

Tôi đã thay đổi sự kiện click của bạn đến một mousedown (để nó cháy đầu tiên) và sử dụng một biến để theo dõi nhấp chuột của bạn:

var buttonClicked = false; 

$('#txt1').focusout(function(){ 
    if(!(buttonClicked)){ 
     alert('BlurEvent'); 
    }else{ 
     buttonClicked = false; 
    } 
}); 

$('#btn').mousedown(function(event){ 
    alert('ClickEvent'); 
    buttonClicked = true; 
}); 

http://jsfiddle.net/924SZ/

EDIT

var buttonClicked = false; 

$('#txt1').focusout(function(){ 
    if(!(buttonClicked)){ 
     // do normal focusout code. 
    }else{ 
     // button was clicked - dont execute some code. 
     buttonClicked = false; 
    } 
    //this always executes regardless of focusout or button click 
    var reply =confirm("Are you happy with the input?"); 
}); 

$('#btn').mousedown(function(event){ 

    buttonClicked = true; 
}); 
+0

Xin chào, nếu bạn nhìn thấy trong mã của bạn, nếu tôi gõ bất cứ điều gì trong txtbox và bấm vào nút đầu tiên tập trung cảnh báo được gọi là và sau đó nhấp vào sự kiện. những gì tôi cần là shud sự kiện tập trung không được gọi là tất cả .. chỉ là sự kiện nút shud được gọi. –

+0

vì chúng ta đang sử dụng sự kiện 'mousedown', nó được gọi đầu tiên trước' focusout' sẽ xảy ra sau 'mouseup'. bằng cách sử dụng một biến, chúng ta loại bỏ hàm 'focusout' khỏi việc thực thi. I E. Nếu chúng ta nhấp vào nút khi hộp văn bản có tiêu điểm, 'alert ('BlurEvent')' không kích hoạt. – f0x

+0

Chúng tôi cũng loại bỏ khả năng làm bất cứ điều gì khác hơn là bấm vào nút bằng chuột ... – Town

0

Tôi nghĩ bộ chọn JQuery hoạt động với $. Vì vậy, IMO bạn là đây là sai lầm duy nhất bạn đang làm ở đây là đặt sai ký hiệu đô la '$'.

Làm thế nào về điều này. (Giả sử các TextBoxclass="textbox"Buttonclass='btn') Thay đổi

$(".textbox").focusout(function(){ 
    alert('MsgBox'); 
}); 

$(".btn").click(function(){ 
    alert('Button');  
}); 

chọn như sau nếu bạn có ID s thay vì class

$("#textbox") AND $("#btn") 

http://jsfiddle.net/dAa2R/6/

+0

vấn đề là tiêu điểm vẫn đang kích hoạt gây ra một cửa sổ bật lên trên ứng dụng OPs. – f0x

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