2011-06-16 10 views
10

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

यह एक छोटा सा उदाहरण है:

<input type = "text" onchange = "showAlert1()"> 
<input type = "button" id = "al2" value = "Click Here" onclick = "showAlert2()"> 

<script type = "text/javascript"> 

function showAlert1() 
{ 
    alert("ONE") 
} 

function showAlert2() 
{ 
    alert ("TWO"); 
} 

</script> 

ऑनक्लिक ईवेंट हैंडलर showAlert2() करता है, तो एक परिवर्तन इनपुट मूल्य के लिए किया जाता है और उपयोगकर्ता तुरंत बटन पर क्लिक करता आग नहीं करता है। मैं चाहता हूँ, कि आप इनपुट क्षेत्र के लिए कुछ लिखते हैं, तुरंत बटन पर क्लिक करें और यह आग

चेतावनी ("एक") और चेतावनी ("दो") ...

या केवल

चेतावनी ("दो")

+0

की कोशिश की KeyUp या keydown बजाय onChange? – Max

+0

क्या आप ईवेंट ऑनकीप – Grumpy

उत्तर

2

जहां तक ​​मेरा बता सकते हैं यह बुदबुदाती (जो onchange साथ एक समस्या है लेकिन इस मामले में एक रेड हेरिंग है) के साथ एक समस्या नहीं है। समस्या यह है कि फ़ील्ड मान बदलने के बाद बटन पर क्लिक करने से blur ट्रिगर हो रहा है, जिससे बटन onclick ट्रिगर होने से पहले showAlert1() चलाया जा सकता है।

यहां वर्णित तरीके से काम करने का एक त्वरित उदाहरण है लेकिन आप देखेंगे कि यह किसी भी चीज़ से अविश्वसनीय हैक है। असल में यह प्रत्येक फ़ंक्शन के निष्पादन को बफर करता है ताकि बटन का onclick ट्रिगर किया जा सके। हालांकि अगर आप setTimeout() के माध्यम से प्रत्येक फ़ंक्शन के भीतर सेट बफर से अधिक लंबे समय तक बटन को क्लिक करके दबाएंगे।

function showAlert1() { 
    setTimeout(function(){ alert("ONE") }, 250); 
} 

function showAlert2() { 
    setTimeout(function(){ alert("TWO") }, 250); 
} 

डेमो: jsfiddle.net/5rTLq

+0

ठीक नहीं कर सकते हैं, यह एक संभावना है। लेकिन, यह वास्तव में अच्छा नहीं है। – ezebemmel

1

कैसे इस

function showAlert1(a) { 
    alert(a.value); /* use setTimeout to delay */ 
} 

function showAlert2() { 
    alert(document.getElementById('txt').value); 
} 

परीक्षण के बारे में: http://jsfiddle.net/C3jRr/2/

+0

ऐसा नहीं है, मैं क्या चाहता हूं ... – ezebemmel

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