2017-04-11 94 views
1

我不斷收到結果未定義,但警報輸出結果! 有點令人費解,同樣的事情發生在Chrome和IE中。Javascript變量未定義,但警報輸出變量

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
<body> 


<form id="frm1" action="#" method="post"> 
    Yammer ID: <input type="text" name="y_id"><br><br> 
    <input type="submit" onclick="myFunction()" value="Submit"> 
</form> 
<p id="demo">uuu</p> 

<script> 
function myFunction() { 
    frm_i=document.getElementById("frm1"); 
    result=frm_i.elements[0].value; 
    alert (result); 
}  
    document.getElementById("demo").innerHTML = result;  
</script> 

</body> 
</html> 

我把:

document.getElementById("demo").innerHTML = result; 

在函數內部,我沒有得到一個錯誤,UUU短暫變爲輸入文本,然後同樣迅速地變回UUU。但是我沒有這樣的錯誤信息。

+1

你的網頁是令人耳目一新,因爲你提交表單。將按鈕從表單中拉出或查看如何防止表單提交。 –

+0

你究竟在哪裏得到錯誤? 'result'只在'myFunction'中定義。它不能從外部訪問。 – Carcigenicate

+0

聲明'result'像這樣'var result = ...' – zer00ne

回答

0

添加varfrm_iresult和地點:

在函數內部。它超出了範圍。

增加了一個測試服務器,以驗證成功,#demo變爲<output>

爲了防止形式從清爽提交後,你可以在target屬性添加到<form>

<form id="frm1" action="http://httpbin.org/post" method="post" target='ifm'> 

target的值可以是您控制的任何位置,也可以是'_blank'這是一個新頁面(就像錨點一樣)。如果您希望提交是條死衚衕,然後使用:

target='#/' 

在這個片段中,我提交到測試服務器,然後重定向使用iframe的name屬性到空白的iframe的響應。

代碼片段

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
</head> 
 

 
<body> 
 

 

 
    <form id="frm1" action="http://httpbin.org/post" method="post" target='ifm'> 
 
    Yammer ID: <input type="text" name="y_id"><br><br> 
 
    <input type="submit" onclick="myFunction()" value="Submit"> 
 
    <output id='demo'></output> 
 
    </form> 
 

 
    <iframe name='ifm' src='about:blank'></iframe> 
 

 
    <script> 
 
    function myFunction() { 
 
     var frm_i = document.getElementById("frm1"); 
 
     var result = frm_i.elements[0].value; 
 
     alert(result); 
 
     document.getElementById("demo").innerHTML = result; 
 
    } 
 
    </script> 
 

 
</body> 
 

 
</html>

+0

謝謝我認爲我最大的問題是我的範圍,謝謝你的強調。 – hrhsii

+0

是的,這是一個簡單的錯誤,我添加了其餘的部分給你看一些選項,這對測試很有用。快樂的編碼。 – zer00ne