2010-09-29 62 views
3

我無法獲得以下代碼工作:當我按下文本框中的輸入時,函數不會被調用。我不明白爲什麼......Javascript:輸入不起作用來提交密碼

<form> 
<p align="center"> 
<input type="password" class="password" name="text1" onkeypress="submitonenter(text1.value,"money","cash",event)" /><br> 
<input type="button" value="Enter" style="width: 100px" name="Enter" onclick=javascript:validate(text1.value,"money","cash") /> 
</p> 
</form> 

<script type="text/javascript"> 
    function submitonenter(text1,text2,text3,evt) { 
     evt = (evt) ? evt : ((window.event) ? window.event : "") 
     if (evt) { 
      // process event here 
      if (evt.keyCode==13 || evt.which==13) { 

if (text1==text2) 
load('money/welcome.html'); 
else 
{ 
    if (text1==text3) 
    load('cash/welcome.html'); 
    else 
    { 
    load('failure.html'); 
    } 
} 

      } 
     } 
    } 
</script> 

<script language = "javascript"> 
function validate(text1,text2,text3) 
{ 
if (text1==text2) 
load('money/welcome.html'); 
else 
{ 
    if (text1==text3) 
    load('cash/welcome.html'); 
    else 
    { 
    load('failure.html'); 
    } 
} 
} 
function load(url) 
{ 
location.href=url; 
} 
</script> 
+2

爲什麼不使用提交按鈕?然後Enter將自動工作,根本不需要Javascript。 – Joey 2010-09-29 14:33:58

回答

2

我不知道爲什麼你需要submitOnEnter函數。

爲什麼不只是將輸入type='button'更改爲type='submit'並將onclick關鍵字更改爲onsubmit

編輯: 道歉,當然'onsubmit'將需要放在窗體標籤,而不是輸入。 給予如下:

<form onsubmit=validate(text1.value,"money","cash") > 
    <p align="center"> 
    <input type="password" class="password" name="text1" /><br> 
    <input type="submit" value="Enter" style="width: 100px" name="Enter" /> 
    </p> 
</form> 
0

像別人說的 - 去掉onclick事件,更改按鈕提交按鈕,並把你的代碼的其餘部分通過的onsubmit標籤,如果你在表單上引用的函數內在提交之前需要處理/重新格式化數據。

1

我會改寫這一切,並使用輸入類型=「提交」,而不是一個按鈕(我也改變了訪問密碼字段中,能夠在Firefox中使用它):

<form id="myForm" method="POST" action="failure.html" onsubmit="return validate(document.getElementById('text1').value,'money','cash');"> 
<p align="center"> 
<input type="password" class="password" name="text1" id="text1"/><br> 
<input type="submit" value="Enter" style="width: 100px" name="Enter" /> 
</p> 
</form> 

<script language = "javascript"> 
    function validate(text1,text2,text3) { 
     var form=document.getElementById('myForm'); 
     if (text1==text2) 
      form.action='money/welcome.html'; 
     else { 
      if (text1==text3) 
      form.action='cash/welcome.html'; 
      else { 
       form.action='failure.html'; 
      } 
     } 
     return true; 
    } 
</script> 

編輯:按@mway推薦實施onSubmit(謝謝)。

+1

默認的'action'參數會不會更好,然後用'onsubmit()'相應地改變'action'的值? – mway 2010-09-29 14:55:22

+0

是的,它會更清晰,更可靠(如果瀏覽器禁用Javascript)。感謝您的意見。 – 2010-09-29 15:06:33

0

確認Enter鍵已被按下後,您想調用「evt.preventDefault()」以防止發生默認操作(即表單提交)。我相信發生了什麼事是你正在設置location.href,但是在負載發生之前表單正在提交,所以它重新加載了相同的頁面。

其他人提到服務器端處理,從安全角度來看,這可能是一個好主意。目前這個頁面沒有任何安全性。任何人都可以看看你的JavaScript,並選擇導航到兩個歡迎頁面(或失敗頁面)中的任何一個,就好像他們正確地輸入了密碼一樣。如果這意味着要安全,那麼你可能想去閱讀關於安全性的文章。總之,儘管在服務器上進行密碼檢查和遵循邏輯,並且沒有那麼容易猜到的密碼。 :)你也可能想包括檢查他們在每個頁面上給出了正確的密碼(例如歡迎頁面)。一旦確認密碼後,可以通過設置會話變量輕鬆完成此操作。