2012-08-09 12 views
47

मैं निम्न मार्कअप है:एचटीएमएल का चयन करें - तब भी जब विकल्प नहीं बदला गया है उत्प्रेरक जावास्क्रिप्ट onchange घटना

<select onchange="jsFunction()"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

एक उपयोगकर्ता बता गया नीचे खींचती है और एक ही विकल्प है कि पहले चुना गया था का चयन करता है (या नहीं करता है ' चयन को बिल्कुल बदल नहीं सकते हैं), जावास्क्रिप्ट इसे onchange ईवेंट के रूप में नहीं मानता है। तो, jsFunction() नहीं कहा जाता है। लेकिन मुझे इस मामले में भी jsFunction() कहा जाता है। इसे कैसे प्राप्त किया जा सकता है?

+3

आम तौर पर जब मैं इस व्यवहार को चाहता हूं तो मैं कोई अतिरिक्त प्रविष्टि नहीं जोड़ता जो डिफ़ॉल्ट है ... और घटना में हैंडलर जांचता है कि यह चुना गया था, और यदि ऐसा है, तो कुछ भी नहीं करें। – Geoffrey

+0

@ गेफ्री मैंने भी ऐसा सोचा था। वह फिर से एक और समस्या लाता है। मैं गतिशील रूप से (जावास्क्रिप्ट का उपयोग करके) वांछित विकल्प का चयन कैसे कर सकता हूं (इस मामले में कोई मूल्य नहीं है)? –

उत्तर

69

मैं इस तरह यह करना चाहते हैं:

<select onchange="jsFunction()"> 
    <option value="" disabled selected style="display:none;">Label</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

आप आपको पहले विकल्प है, जो इस मामले में 1. बेहतर भी रूप में एक ही लेबल हो सकता था चाहते हैं: एक लेबल डाल बॉक्स में विकल्पों के लिए वहाँ।

+1

और जब भी मुझे combobox दिखाना पड़ा, तो मैंने ** selecedIndex ** को 0 पर सेट किया। वर्क्स प्रीफेक्ट !! –

+0

अच्छा समाधान @ सिमसन। –

0

इसे आजमाएं। बस एक खाली विकल्प जोड़ें। यह आपकी समस्या का समाधान करेगा।

<select onchange="jsFunction()"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select>​ 
+1

यह शीर्ष पर एक खाली बॉक्स बनाएगा, जो भी चयन योग्य है। एक बहुत अच्छा समाधान नहीं है। –

+0

जो पहले विकल्प के लिए काम करता है। जब अन्य विकल्प चुना जाता है और फिर उपयोगकर्ता एक ही विकल्प का चयन करता है ?? –

0

यह फायरिंग नहीं है क्योंकि मान "बदला" नहीं है। यह वही मूल्य है। दुर्भाग्यवश, आप change ईवेंट का उपयोग करके वांछित व्यवहार प्राप्त नहीं कर सकते हैं।

आप blur ईवेंट को संभाल सकते हैं और उपयोगकर्ता को चुनिंदा बॉक्स छोड़ने पर आपको जो भी प्रोसेसिंग चाहिए, वह कर सकते हैं। इस तरह आप जिस कोड को चाहते हैं उसे चला सकते हैं भले ही उपयोगकर्ता एक ही मूल्य का चयन करता हो।

+0

असल में स्थिति इस तरह है। मेरे पास एक combox बॉक्स है। जब कोई विकल्प चुना जाता है, तो मैं कंघॉक्स को छुपाता हूं और चेंज विकल्प के साथ लैबेल के रूप में combobox के मान को दिखाता हूं। जब चेंज क्लिक किया जाता है, तो मैं उस combobox दिखाता हूं। –

+0

@RajBD, हाँ, आप 'धुंध' को संभाले बिना और उन्हें अद्यतन करने के लिए चयन छोड़ने के बिना ऐसा करने में सक्षम नहीं होंगे। हालांकि यह मामूली उपयोगिता मुद्दा है। मुझे लगता है कि यदि आप इसे दिखा रहे हैं तो चयन बॉक्स के बगल में एक "रद्द करें" लिंक डालकर, उन्हें "रद्द" करने का एक स्पष्ट विकल्प प्रदान करना बेहतर होगा। – Strelok

21

आप इसे हल करने के लिए खाली विकल्प जोड़ने के लिए है,

मैं भी आप एक और समाधान दे सकते हैं, लेकिन आपको लगता है कि करने के लिए अपने आप के लिए ठीक है या नहीं क्योंकि jsFunction के अलावा अन्य विकल्पों का चयन करने के बाद उपयोगकर्ता का चयन डिफ़ॉल्ट विकल्प होगा दो बार बुलाया जा सकता है।

<select onChange="jsFunction()" id="selectOpt"> 
    <option value="1" onclick="jsFunction()">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

function jsFunction(){ 
    var myselect = document.getElementById("selectOpt"); 
    alert(myselect.options[myselect.selectedIndex].value); 
} 
+1

मैंने पहले ONCLICK की कोशिश की .. सभी ब्राउज़रों में काम नहीं करता .. विशेष रूप से क्रोम। –

2

प्रत्येक विकल्प तत्व के साथ "onmouseup" संपत्ति का उपयोग करें। यह verbose है, लेकिन काम करना चाहिए। भी, क्या आपके समारोह वास्तव में क्या कर रहा है पर निर्भर करता है, आप चीजों को थोड़ा अलग तरह की व्यवस्था कर सकता है, संख्या संभालने हैंडलर में महत्वपूर्ण है:

<select> 
<option onmouseup="handler()" value="1">1</option> //get selected element in handler 
<option onmouseup="handler(2)" value="2">2</option> //explicitly send the value as argument 
<option onmouseup="handler(this.value)" value="3">3</option> //same as above, but using the element's value property and allowing for dynamic option value. you could also send "this.innerHTML" or "this.textContent" to the handler, making option value unnecessary 
</select> 
3

यह काम करता है:

<select name="type" onmousedown="this.value='';" onchange="alert('Changed.');"> 
    <option value='1'>One</option> 
    <option value='2'>Two</option> 
    <option value='3'>Three</option> 
    <option value='4'>Four</option> 
    <option value='5'>Five</option> 
    <option value='6'>Six</option> 
    <option value='7'>Seven</option> 
    <option value='8'>Eight</option> 
    <option value='9'>Nine</option> 
    <option value='10'>Ten</option> 
</select> 
+2

यह काम नहीं करता – smartmouse

+0

@smartmouse यह Google क्रोम – Ben

1

जावा स्क्रिप्ट कोड:

    mousedown घटना पर
  • : सेट SelectedIndex संपत्ति के मूल्य परिवर्तन ईवेंट पर -1
  • : घटना
  • संभाल

केवल दोष यह है कि जब उपयोगकर्ता ड्रॉपडाउन सूची पर क्लिक करता है, वर्तमान में चयनित आइटम का चयन किया दिखाई न दे

-2

इस तरह है।

पहला "खाली" है।

<option></option> 
    <option>01</option> 
    <option>02</option> 
    <option>03</option> 
    <option>04</option> 
    <option>05</option> 
    <option>06</option> 
    <option>07</option> 
    <option>08</option> 
    <option>09</option> 
    <option>10</option> 
    <option>11</option> 
    <option>12</option> 
+2

के नवीनतम संस्करण पर काम करता है यह पूछे जाने वाले प्रश्न का उत्तर नहीं है, जो जावास्क्रिप्ट परिवर्तन घटनाओं के व्यवहार के बारे में है। – Carpetsmoker

1

बस अपने प्रसंस्करण घटना के अंतिम चरण के रूप में -1 से जुड़े <select> टैग की selectIndex निर्धारित किया है।

mySelect = document.getElementById("idlist"); 
mySelect.selectedIndex = -1; 

यह हर बार काम करता है, मुख्य आकर्षण को दूर करने और आप एक ही (या अलग) तत्व फिर से चयन करने के लिए अनुमति देता है।

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