2013-12-12 5 views
6

जब कोई उपयोगकर्ता प्रॉम्प्ट पर ठीक दबाता है तो रिक्त मान का पता कैसे लगाता है (और पहले प्रॉम्प्ट फ़ील्ड खाली करता है)? मुझे पुराने मूल्य को नए (खाली) मान के साथ ओवरराइट करने की आवश्यकता है। मैं यह कर रहा हूं:प्रॉम्प्ट पर रिक्त मान का पता लगाएं

var oldVal = 'something'; 
var newVal = prompt("Enter new value:", oldVal); 

यदि उपयोगकर्ता खाली मानता है और क्लिक ठीक करता है तो वर्तमान में यह शून्य हो जाता है।

लेकिन साथ ही मुझे शून्य मान की जांच करने की आवश्यकता है क्योंकि यदि उपयोगकर्ता 'रद्द' पर क्लिक करता है, तो यह शून्य हो जाएगा, जिसे मैं नया मान नहीं चाहता हूं।

+3

'prompt' वापस नहीं करता है शून्य जब इनपुट खाली है और ठीक दबाया जाता है; यह खाली स्ट्रिंग देता है। –

उत्तर

13

यह उपयोगकर्ता null वापस नहीं करता है यदि उपयोगकर्ता ठीक है - यह एक खाली स्ट्रिंग वापस करेगा। आप शायद वापसी मूल्य का सही ढंग से परीक्षण नहीं कर रहे हैं। आप तीन अलग-अलग राज्यों के बीच वापसी का परीक्षण करना चाहते हैं, तो आप ऐसा कर सकते हैं इस तरह:

var oldVal = 'something'; 
var newVal = prompt("Enter new value:", oldVal); 
if (newVal === "") { 
    // user pressed OK, but the input field was empty 
} else if (newVal) { 
    // user typed something and hit OK 
} else { 
    // user hit cancel 
} 

कार्य डेमो: http://jsfiddle.net/jfriend00/Kx2EK/


आपकी टिप्पणी पता चलता है कि आप परीक्षण करने के लिए इस कोड का उपयोग कर रहे परिणाम:

if(!newVal || oldVal == newVal)return false; 

उपयोगकर्ता क्षेत्र को साफ करता है और ठीक दबाता है, तो newVal "" (कोई रिक्त स्ट्रिंग) हो जाएगा। !newValtrue होगा ताकि आप false वापस कर सकें। एक खाली स्ट्रिंग एक झूठी मान है जैसे null

if (newVal === null || newVal === oldVal) { 
    // cancel button was hit 
    // or the same value was entered 
    return false; 
} 

कार्य इस तर्क के डेमो: http://jsfiddle.net/jfriend00/ynwBx/

नोट: मैं === उपयोग कर रहा हूँ किसी भी प्रकार के कास्टिंग करने से जावास्क्रिप्ट दुभाषिया को रोकने के लिए के रूप में मैं चाहता हूँ आप और अधिक स्पष्ट रूप से null इस तरह की जांच करने की जरूरत है केवल null के लिए स्पष्ट रूप से जांचें।

+0

लेकिन मुझे यह मेरे कथन में रखना होगा: यदि (! NewVal || oldVal == newVal) झूठी वापसी; इसलिए मुझे शून्य की जांच करने की ज़रूरत है। और यदि उपयोगकर्ता तत्काल फ़ील्ड खाली करता है, तो ठीक दबाता है, शून्य वापस आ जाएगा। – Toniq

+0

@ टोनीक - आपको यह समझ में नहीं आता है कि '! नया वैल' एक खाली स्ट्रिंग से भी मेल खाता है ताकि आप 'शून्य' (रद्द करें बटन) और खाली स्ट्रिंग (ठीक बटन) के बीच अंतर नहीं कर रहे हैं। मैंने अपने उत्तर में कोड जोड़ा है जो आपको दिखाएगा कि आपने जो किया है उसे कैसे करें। – jfriend00

+0

धन्यवाद, यह अब काम करता है! – Toniq

2

अधिकांश ब्राउज़र्स प्रॉम्प्ट में null वापस आ जाएगा यदि उपयोगकर्ता रद्द करता है, लेकिन कुछ में (सफारी, पूर्व के लिए) यह खाली स्ट्रिंग देता है। यदि उपयोगकर्ता कुछ पाठ में प्रवेश करता है और ठीक दबाता है, तो प्रॉम्प्ट दर्ज टेक्स्ट लौटाएगा, अगर उपयोगकर्ता टेक्स्ट दर्ज किए बिना ठीक दबाता है, तो यह खाली स्ट्रिंग वापस कर देगा।

1

एक बिट वर्ष है, लेकिन यह करना श्रेयस्कर होगा बस एक ही है, तो() बयान

if(newVal !=null & newVal.length>0){ 

दोनों रद्द करें के लिए और एक खाली प्रविष्टि चेक में स्ट्रिंग की लंबाई के लिए एक परीक्षण में शामिल हैं।

+0

क्या आपने इसका परीक्षण किया है? '&&' होना चाहिए, बाइनरी नहीं 'और '(हालांकि मुझे यकीन नहीं है कि' & 'यहां भी काम करेगा) – YakovL

0
<html> 
<body>  
<p>Click the button to demonstrate the prompt box.</p>  
<button onclick="myFunction()">Try it</button>  
<p id="demo"></p>  
<script> 
function myFunction() { 
    var answer=prompt('Reason for deletion?'); 
    var n = answer.length; 
    if(n > 5) 
    { 
    document.getElementById("demo").innerHTML = 
    "Hello " + answer + "! How are you today?"; 
    } 
    else if(n == 0) 
    { 
    myFunction() 
    } 
} 
</script>  
</body> 
</html> 
+0

कृपया स्पष्टीकरण प्रदान करें – bc004346

+0

आप त्वरित बॉक्स में शून्य मान देख सकते हैं ... यदि प्रॉम्प्ट बॉक्स एक शून्य वापस लौटाता है, फिर यह उसी फ़ंक्शन पर वापस आ जाता है ... – sebastian

0

सरल अगर दोनों रिक्त स्ट्रिंग के साथ रद्द करने या ठीक देखने के लिए

function valueIsSet(value) 
{ 
    return (value && value !== "") 
} 

// example: 

var name; 
while (!valueIsSet(name) { 
    name = prompt("Please enter your name"); 
} 

alert("Welcome " + name); 
संबंधित मुद्दे