2016-11-17 73 views
2

當我用Enter提交表單時,它沒有任何問題。我可以成功登錄。當我使用按鈕提交表單時,它在Firefox上成功登錄,但不在Chrome上登錄。問題是,它重複兩次函數併發送不同的哈希密碼。我怎樣才能讓它在Chrome上工作呢?提交電話功能兩次

按鈕:

<div id="submit" name="submit" value="login" class="ui fluid large pink submit button" onclick="submitForm();">Login</div> 

表:

<form id="form" autocomplete="off" class="ui large form" id = "form" name="form" method="post" action="php/verify.php" onsubmit="submitForm();"> 

我加onsubmit="submitForm();"形成,甚至調用函數時,我提交表單與Enter

JavaScript函數:

function submitForm(){ 
    var form = document.getElementById("form"); 
    var pwd = document.getElementById('pwd'); 
    var hash = new jsSHA("SHA-256", "TEXT", {numRounds: 1}); 
    hash.update(pwd.value); 
    var hash = hash.getHash("HEX"); 
    var password = document.createElement("input"); 
    password.name="password"; 
    password.type="hidden"; 
    password.id = "password"; 
    password.value = hash; 
    alert(password.value); 
    form.appendChild(password); 
    form.submit(); 
    pwd.value = ""; 
} 

回答

3

在你的onsubmit處理,您要提交表單:

form.submit(); 

如果你這樣做,處理程序必須返回false,這意味着你需要

<form ... onsubmit="submitForm(); return false;"> 

否則,你將手動提交表單,那麼瀏覽器就會提交第二次,因爲的onsubmit沒有返回假;

+0

簡單的解決方案。有用。謝謝! – Mirakurun

+0

你能解釋一下爲什麼我的代碼可以在Firefox中使用,但不能在Chrome中使用? – Mirakurun

+1

我不是100%確定的,但我的猜測是,由於提交表單意味着瀏覽器將導航到新的資源,所以發生了什麼事情是您告訴瀏覽器快速連續兩次加載另一個頁面。 Firefox可能會在第二個請求發生時立即取消第一個請求,而Chrome開發人員則選擇同時處理這兩個請求。 –

0

你有兩個的提交:

onsubmit="submitForm();" and onclick="submitForm();" 

刪除其中的一個

+0

那麼,如果我刪除其中的一個,我將無法使用Enter和Button進行提交。 – Mirakurun

+0

他是對的。你的按鈕必須是type =「submit」 – yBrodsky

+0

他錯了;具有多個調用函數的元素並不一定意味着該函數被多次調用。 –

1

我可以看到兩個可能的原因:

1-安裝了兩個處理程序:onSubmitonClick。相反,離開onSubmit處理程序,並使用一個按鈕submit類型:

<form onsubmit="submitForm()"> 
    <input type="submit"> <!-- this is equivalent to pressing enter --> 
    <button type="submit"></button> <!-- also equivalent --> 
</form> 

2 - 如果你要手動submit在事件處理程序的形式,你應該從發生停止默認的行爲,這可能佔第二(未處理)提交:

function submitForm(event) { 
    event.preventDefault() 
} 
0

<form>標籤取下onsubmit="submitForm();並創建<form>標籤內的<input type="submit" onclick="submitForm();>

0

您可以使用輸入控件(type = submit)而不是登錄按鈕的div。
這是這樣的:

<input type="submit" value="Login" class="ui fluid large pink submit button"/> 

所以的onsubmit電話就足夠了。