हमें काम पर एक ही समस्या थी। हमने के अंत में क्या पता लगाया था कि मूसडाउन घटना ब्लर इवेंट से पहले आग लग जाएगी, जिससे आप सत्यापन से पहले सामग्री सेट कर सकते हैं या सत्यापन को पूरी तरह से ध्वज का उपयोग करके प्रक्रिया को रद्द कर सकते हैं।
जांच इस बेला मैं अपने उदाहरण का उपयोग किया http://jsfiddle.net/dL3K3/31/
$(function(){
var flag = true;
$('input').blur(function(){
if(!$(this).val() && flag){
alert("Grrr, It's empty");
}
});
$('button').mousedown(function(){
flag = false;
});
$('button').mouseup(function(){
flag = true;
$('input').val('content').focus();
});
});
-Edit-
@mclin के रूप में सुझाए गए, mousedown घटना का उपयोग करने और preventDefault कलंक व्यवहार नहीं कर पाएगा। और तुम सिर्फ मूल क्लिक करें घटना बरकरार छोड़ सकते हैं -
http://jsfiddle.net/dL3K3/364/
$(function(){
$('input').blur(function(){
if(!$(this).val()){
alert("Grrr, It's empty");
}
});
$('button').mousedown(function(e){
e.preventDefault();
});
$('button').click(function(){
$('input').val('content');
});
});
यह समाधान थोड़ा क्लीनर और ज्यादातर मामलों के लिए बेहतर हो सकता है बस ध्यान दें कि यदि आप इसका इस्तेमाल आप करेंगे preventDefault और का कलंक वर्तमान में कोई अन्य तत्व फोकस चालू है लेकिन ज्यादातर उपयोग मामलों के लिए जो कोई मुद्दा नहीं होना चाहिए।
स्रोत
2012-03-26 09:40:36
आपका प्रश्न छिपाने की कोशिश कर के बावजूद स्पष्ट नहीं है? आपकी समस्या और अपेक्षित समाधान क्या है? –
असल में एक उपयोगकर्ता कार्रवाई दो घटनाओं का कारण बनती है जो क्रम में आग लगती हैं लेकिन दूसरी बार की कार्रवाई पहले की पर निर्भर करती है। मैंने पहली घटना में देरी के लिए सेटटाइमआउट का उपयोग करने पर विचार किया है, लेकिन यह एक आदर्श समाधान की तरह प्रतीत नहीं होता है। – Jake
मैंने इस सवाल को काफी सामान्य रूप में पूछा है क्योंकि मुझे इस समस्या का सामना विभिन्न परिस्थितियों में कुछ बार हुआ है। – Jake