2016-11-17 4 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(); 

Если вы сделаете это, то обработчик должен вернуть ложь, а это значит, что вам нужно

<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- У вас есть два обработчика установлены: onSubmit и onClick. Вместо этого оставьте onSubmit обработчик и использовать кнопку с submit типом:

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

2- Если вы собираетесь вручную submit форму в обработчике события, вы должны остановить поведение по умолчанию из места, которые могли бы счет на 2-й (необработанного) представляет:

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

Удалить onsubmit="submitForm(); из <form> тега и создать <input type="submit" onclick="submitForm();> внутри <form> тега.

0

Вы можете использовать элемент управления ввода (type = submit) вместо div для кнопки входа.
Это что-то вроде этого:

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

Так onsubmit вызов будет достаточно.