2013-07-29 4 views
5

हाय मैं जावास्क्रिप्ट के लिए नया हूं और मैं चाहता हूं कि आप मुझे यह जानने में मदद करें कि मुझे यादृच्छिक संख्या जनरेटर का परिणाम क्यों नहीं मिल रहा है उपयोगकर्ता द्वारा दर्ज किए गए न्यूनतम और अधिकतम संख्या का उपयोग करके गणना बटन पर क्लिक करने के बाद अवधि टैग में दिखाई दें। मेरा मानना ​​है कि यादृच्छिक संख्या फ़ंक्शन के साथ कुछ भी गलत नहीं है, जब मैं यादृच्छिक संख्या फ़ंक्शन का उपयोग उस बटन के लिए ऑनक्लिक ईवेंट के लिए ईवेंट हैंडलर के रूप में करना चाहता हूं, जो यह काम नहीं करता है। ठीक है, मैंने जो किया था, मैंने उपयोगकर्ताओं के इनपुट को इकट्ठा करने के लिए उत्तर दिया और उस इनपुट का उपयोग उस क्रमिक संख्या फ़ंक्शन के लिए पैरामीटर के रूप में करने के लिए किया जिसे उत्तर फ़ंक्शन के अंदर बुलाया जा रहा है।बटन के बाद जावास्क्रिप्ट के साथ एक अवधि के लिए गणना का परिणाम जोड़ना

फिर मैंने जवाब कार्य को एक घटना हैंडलर के रूप में इस्तेमाल किया, यह सोचने के लिए कि यह यादृच्छिक संख्या जेनरेटर का परिणाम होगा और इसे ऑनक्लिक पर लागू करेगा। और मैंने संग्रहीत किया कि विभिन्न कॉल स्टोरेज में मैं बाद में स्पैन टैग में ईवेंट का परिणाम डाल सकता हूं।

यहां कोड का जेएस पहेली है। क्या आप बटन $ ("गणना") के बाद span $ ("output") में random_number फ़ंक्शन का परिणाम प्राप्त करके मेरी समस्या का समाधान करने में मेरी सहायता कर सकते हैं?

केवल शुद्ध जावास्क्रिप्ट, कोई jquery कृपया।

आपकी मदद के लिए अग्रिम धन्यवाद। और मुझे खेद है अगर मुझे शब्दावली गलत और खराब वर्तनी के लिए मिला। http://jsfiddle.net/jack2ky/WDyMd/

 <label for="min">Enter the min:</label> 
    <input type="text" id = "min" /> <br /> 

    <label for="max">Enter the max:</label> 
    <input type="text" id = "max" /> <br /> 

    <input type="button" id = "calculate" value = "calculate"/> 
    <span id ="output">&nbsp;</span> 
<script> 

    var $ = function(id){ 
     return document.getElementById(id); 
    } 
window.onload = function() { 


    var random_number = function(min, max, digits){ 
     digits = isNaN(digits) ? 0 : parseInt(digits); 

     if(digits < 0){ 
      digits = 0; 
     }else if (digits > 16){ 
      digits = 16 
     } 
     if(digits == 0){ 
      return Math.floor(Math.random() * (max - min +1)) +min; 
     }else { 
      var rand = Math.random() * (max - min) + min; 
      return parseFloat(rand.toFixed(digits)); 
     } 
    } 


    var storage = $("calculate").onclick = answer; 

    var answer = function(){ 
      var miny = $("min").value; 
      var maxy = $("max").value; 
      return random_number(miny, maxy); 
    } 
    $("output").firstChild.nodeValue = storage; 

} 

</script> 

</body> 
</html> 

उत्तर

1
var storage = $("calculate").onclick = answer; 
... 
$("output").firstChild.nodeValue = storage; 

इन दो बयानों को पृष्ठ लोड पर बुलाया जाता है। क्या हो रहा है कि आप परिवर्तनीय storage के मान को बदल रहे हैं लेकिन कथन var storage = $("calculate").onclick = answer; को पृष्ठ लोड होने पर केवल एक बार बुलाया जा रहा है। जब उपयोगकर्ता बटन पर क्लिक करता है तो आपको जवाब को अपडेट करने की आवश्यकता होती है। तो तुम $("output").firstChild.nodeValue = storage; हटाने और तरह जवाब समारोह को अद्यतन कर सकते हैं:

var answer = function(){    
       var miny = parseInt($("min").value);    
       var maxy = parseInt($("max").value);      
       var ans = random_number(miny, maxy);     
       $("output").innerHTML = ans; 
     } 
+0

आपकी मदद के लिए धन्यवाद। यह काम करता है :) मैं इस खिड़की पर भ्रमित हो जाता हूं। ऑब्जेक्ट संपत्ति वस्तु को लोड करें।कुछ बार मैं खिड़की में चीजों को कॉल करने में सक्षम हूं। कार्य लोड करें और यह काम करता है और दूसरी बार यह नहीं करता है। यह एक बात है कि मैं सीखने के साथ अपनी प्रगति में ठीक होने की उम्मीद करता हूं। मुझे लगता है कि मैं समझता हूं कि आपने क्या किया है। लेकिन parseInt के बारे में मैंने सोचा था कि parseInt का उपयोग करने का एक अच्छा उदाहरण यह है कि जब कोई उपयोगकर्ता 198.345 की तरह दशमलव के साथ संख्या में डालता है तो यह इसे 198 तक काट देगा। इस मामले में क्यों उपयोगकर्ता के 111 के आउटपुट के परिणामस्वरूप इसका अंतर होता है 1-10max बाहर parseInt बाहर रखता है। –

+0

यह जानकर खुशी हुई कि यह काम करता है :)। ParseInt() फ़ंक्शन एक स्ट्रिंग को पार करता है और एक पूर्णांक देता है। इस मामले में यह आवश्यक है क्योंकि आपको टेक्स्टबॉक्स से न्यूनतम और अधिकतम मूल्य मिल रहा है जिसे डिफ़ॉल्ट रूप से संख्यात्मक स्ट्रिंग के रूप में मूल्यांकन किया जाता है। तो अगर 'न्यूनतम = 5; अधिकतम = 10' 'न्यूनतम + अधिकतम' जैसे अभिव्यक्तियों का आउटपुट '15' के बजाय' 510' होगा। आप फ़्लोटिंग पॉइंट नंबरों को पार्स करने के लिए 'parseFloat()' का उपयोग कर सकते हैं। हां आप दशमलव के साथ कटऑफ नंबर पर 'parseInt() 'का भी उपयोग कर सकते हैं लेकिन इसका वास्तविक उपयोग नहीं है। – Konsole

0

$ ("उत्पादन") firstChild.nodeValue = भंडारण।

यह लाइन समस्या है क्योंकि आपके आउटपुट-एलिमेंट में कोई पहला बच्चा नहीं है। तो मूल्य कहीं भी लिखा नहीं जाता है।

बस का उपयोग

> $("output").nodeValue = storage; 

संपादित करें: jsFiddle में यह परीक्षण किया गया - यह समाधान नहीं नीचे वर्णित के रूप में है!

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन यह प्रतीत नहीं होता है काम। जब उपयोगकर्ता एक मिनट और अधिकतम में प्रवेश करता है तो उस श्रेणी के भीतर यादृच्छिक संख्या क्लिक के बाद अवधि टैग में नीचे दिखाई देनी चाहिए। छुटकारा पाने की कोशिश की। फर्स्ट चाइल्ड लेकिन यह अभी भी काम नहीं करता है। –

+0

इस समय मेरे पास आगे परीक्षण करने का समय नहीं है - लेकिन जब मैं घर पर हूं तो मैं फिर से देखूंगा और अगर कोई और जवाब नहीं देता तो मैं इसका परीक्षण करूंगा। –

0

यदि आप चर भंडारण में अपने मूल्य प्राप्त करने के

तो आप बस HTML के रूप में सी अवधि में यह मान प्रदान कर सकते हैं सक्षम हैं

$("#output span").html = storage; 
+0

ओप ने शुद्ध जावास्क्रिप्ट के लिए कहा; कोई jquery नहीं – Tom

1

यह करना चाहिए:

<!DOCTYPE html> 
<html> 
<head> 
    <script> 
      var $ = function(id){ 
       return document.getElementById(id); 
      } 
      window.onload = function() { 
       var random_number = function(min, max, digits){ 
        digits = isNaN(digits) ? 0 : parseInt(digits); 

        if(digits < 0){ 
         digits = 0; 
        }else if (digits > 16){ 
         digits = 16 
        } 
        if(digits == 0){ 
         return Math.floor(Math.random() * (max - min +1)) +min; 
        }else { 
         var rand = Math.random() * (max - min) + min; 
         return parseFloat(rand.toFixed(digits)); 
        } 
       } 
       $("calculate").onclick = function() { 
        var miny = $("min").value; 
        var maxy = $("max").value; 
        $("output").firstChild.nodeValue = random_number(miny, maxy); 
       } 
      } 
    </script> 
</head> 
<body> 
     <label for="min">Enter the min:</label> 
    <input type="text" id = "min" /> <br /> 

    <label for="max">Enter the max:</label> 
    <input type="text" id = "max" /> <br /> 

    <input type="button" id = "calculate" value = "calculate"/> 
    <span id ="output">&nbsp;</span> 
</body> 
</html> 
+0

आपकी मदद के लिए धन्यवाद। –

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