2010-05-14 16 views
5

मेरे पास एक ऐसा फॉर्म है जहां एक मूल्य के लिए एक इनपुट फ़ील्ड जांचें और फिर मैं टाइपवेच प्लगइन का उपयोग करके अजाक्स कॉल करता हूं (एक छोटी सी चीज जो यह पता लगाती है कि उपयोगकर्ता ने पूर्वनिर्धारित होने के बाद टाइपिंग बंद कर दी है मध्यान्तर)। यह बहुत अच्छा काम करता है।jQuery अजाक्स: कॉपी करें - चिपकाएं

चूंकि यह फ़ील्ड ऑर्डर फॉर्म में "कूपन छूट" है, तो मूल्य को ईमेल या किसी चीज़ से "कूपन कोड" चिपकाने वाली प्रतिलिपि द्वारा प्रतिलिपि दर्ज की जा सकती है। यह कॉपी और पेस्ट के लिए Ctrl + C - Ctrl + V के साथ भी काम करता है लेकिन जब कोई उपयोगकर्ता माउस के साथ टेक्स्ट का चयन नहीं करता है, तो संदर्भ मेनू से प्रतिलिपि क्लिक करता है और फिर इस मेनू से पेस्ट करता है।

क्या jQuery में इस तरह के व्यवहार की जांच करने के लिए jQuery में कोई तरीका है?

उत्तर

1

आप कम समय (1 सेकंड) निर्धारित कर सकते हैं कि चेक अंतिम मूल्य के बाद मूल्य बदल गया है।

आप इसे आसानी से अनदेखा कर सकते हैं और जब फॉर्म इस कूपन छूट इनपुट की सामग्री को पकड़ लेता है और इसे संसाधित करता है।

0

मेरे पास पहले भी एक ही समस्या थी। जहां तक ​​मुझे पता है, ब्राउजर सही घटनाओं के माध्यम से चिपकने पर कोई ईवेंट जारी नहीं करता है, न ही जब वे पहले इस्तेमाल किए गए मानों की सूची से चयन करते हैं।

मैंने अपने ईवेंट हैंडलर को ब्लर इवेंट में बाध्यकारी करके इसे काफी अच्छे तरीके से हल करने का अंत किया। एकमात्र मामला यह नहीं था जब वे माउस के साथ एक मूल्य पेस्ट करते थे, फिर सबमिट करने के लिए एंटर कुंजी दबाएं। मैं एक छोटे से hackery के माध्यम से इस के आसपास प्राप्त करने में सक्षम था:

$(element) 
    .bind('keydown blur', handlerFunction) 
    .keydown(function(event) { 
    if (event.keyCode === 13 /* Enter Key */) { 
     event.preventDefault(); 
     event.stopPropagation(); 
    } 
    }) 
    .keyup(function(event) { 
    if (event.keyCode === 13 /* Enter Key */) { 
     $(this).closest('form').submit(); 
    } 
    }); 

मूलतः, यह काम करता है क्योंकि jQuery क्रम में वे बाध्य में घटनाओं को अंजाम होगा। आम तौर पर, फॉर्म सबमिशन एंटर कीप्रेस के कीडाउन पर होता है। कुंजीपटल हैंडलर समय अपने जादू करने के लिए, आपको उस फॉर्म सबमिशन में देरी करने की आवश्यकता है जब तक कि कीप घटना न हो, तो अन्य कीप हैंडलर पहले चला सकते हैं।

अब, आपने कहा था कि आप एक प्लगइन का उपयोग कर रहे थे जो उपयोगकर्ताओं की घटना पर प्रतिक्रिया करने से पहले देरी जोड़ता है। इसका मतलब है कि आप इस तकनीक verbatim का उपयोग करने में सक्षम नहीं हो सकता है। एक चीज जो काम कर सकती है, फॉर्म को सबमिट करने से पहले सीधे हैंडलर फ़ंक्शन को कॉल करना होगा। ऐसा करने के लिए, आप करने के लिए पिछले KeyUp हैंडलर बदल जाएगा:

.keyup(function(event) { // Part 2 
    if (event.keyCode === 13 /* Enter Key */) { 

     handlerFunction.call(this, event); // force it to happen now 

     $(this).closest('form').submit(); 
    } 
    }); 

जोश कश्मीर के रूप में पहले उल्लेख किया है, तो आप बस प्रस्तुत घटना के लिए कुछ अपने फार्म पर बाध्य कर सकता है इसी तरह कुछ करने के लिए। यदि आप अजाक्स कर रहे हैं, तो, पास विकल्पों में async: false सेट करना सुनिश्चित करें, अन्यथा फॉर्म आगे बढ़ेगा और कॉल को पूरा करने के इंतजार किए बिना सबमिट करेगा।

0

(इस समाधान परीक्षण नहीं किया गया है, लेकिन!) मैं कुछ इस तरह की कोशिश करेंगे: हालांकि लोगों ब्राउज़र प्लग इन के साथ इस हमेशा बायपास कर सकते हैं

var keys_pressed = 0; // count the number of key press events 
var required_keys_pressed = 10; 
$('#yourinputElement').keydown (function() { 
    keys_pressed++; // add one 
}); 
$('#yourform').submit (function() { 
    if (keys_pressed < required_keys_pressed) 
    { 
    // not enough keys pressed or was a CTRL + v 
    } 
    else 
    { 
    // required number of keys pressed for your code 
    } 
}); 

याद रखें, तो यह एक गारंटी है कि चीजें नहीं है जिस तरह से आप चाहते हैं वे चले गए हैं। आपको ALWAYS किसी प्रकार का सर्वर-साइड सत्यापन भी करना चाहिए

संबंधित मुद्दे