Ответ 1
У вас есть два варианта:
- Создайте обработчик событий для кнопки ввода и добавьте его в свои привязки.
- Используйте
<input type=submit>
в форме где-нибудь, а это то, что получает автоматическое поведение Enter Key, которое вы после.
У меня есть следующий код HTML/JS/jQuery. Этот код представляет собой регистрационную форму, которая предоставляется пользователю в режиме реального времени, чтобы позволить им войти в систему. Проблема в том, что когда я нажимаю Enter, форма, похоже, не выполняет событие onsubmit. Когда я нажимаю кнопку в качестве нижней части формы (которая имеет практически тот же код, что и событие onsubmit), она отлично работает. Мне интересно, может ли кто-нибудь сказать мне, почему эта форма не отправляется?? Любая помощь будет оценена.
Код jQuery для показа модальности входа:
showDivAndFocus('loginModal','loginaccount');
function showDivAndFocus(v,t){
if (api)
if (api.isOpened)
api.close();
api = $('#'+v).overlay({
mask: {color: '#000000'},
top:'0px',
api: true,
autoScrollToActive: false,
autoScrollOffset: 0
}).load();
document.getElementById(t).focus();
}
Код HTML
<div class="modal" id="loginModal">
<h2>User Login</h2>
<br />
<form action="javascript:void(0);" onsubmit="return(doLogin());" name="loginForm" id="loginForm">
<table width="95%" cellpadding="4" cellspacing="4">
<tr>
<td class="regw" align="left"><b>Account Number:</b></td>
<td class="regw" align="left"><input type="text" maxlength="10" size="10" name="loginaccount" id="loginaccount" /></td>
</tr>
<tr>
<td class="regw" align="left"><b>Username:</b></td>
<td class="regw" align="left"><input type="text" maxlength="20" size="20" name="loginusername" id="loginusername" /></td>
</tr>
<tr>
<td class="regw" align="left"><b>Password:</b></td>
<td class="regw" align="left"><input type="password" maxlength="20" size="20" name="loginpassword" id="loginpassword" /></td>
</tr>
<tr>
<td class="regw" align="left"><b>Remember Me:</b></td>
<td class="regw" align="left"><input type="checkbox" name="loginremember" id="loginremember" /></td>
</tr>
<tr><td colspan="2">
<div>
<center>
<table><tr><td width="50" valign="middle">
<div id="loginLoading" style="height:24px;width:24px;"></div>
</td><td>
<button onclick="doLogin();" type="button" class="ok">Submit</button>
</td><td>
<button onclick="api.close();" type="button" class="cancel">Cancel</button>
</td><td width="50"> </td></tr></table>
</center>
</div>
</td></tr>
</table>
</form>
</div>
AJAX Call
function doLogin(){
var ajax = getXmlObject();
var f = getFormVariables();
var url= '/login.php?f=' + encodeURIComponent(f);
if (ajax.readyState == 4 || ajax.readyState == 0) {
ajax.open("POST", url, true);
ajax.onreadystatechange = function () {
if (ajax.readyState == 4) {
var a = ajax.responseText;
if (a=="OK"){...} else {...}
}
};
ajax.send(null);
}
return false;
}
У вас есть два варианта:
<input type=submit>
в форме где-нибудь, а это то, что получает автоматическое поведение Enter Key, которое вы после.Я боролся с этой же проблемой; одна из моих форм отправляла при нажатии "enter" в текстовых полях без проблем; другая, аналогичная, форма на той же странице не представила бы вообще, для моей жизни.
Ни одно поле не имело кнопки отправки, и ни один из них не использовал javascript для отправки.
Я обнаружил, что когда в форме есть только одно текстовое поле, нажатие 'enter' в текстовом поле будет автоматически отправлено; но если имеется более одного (регулярного (то есть однострочного) ввода текста), он ничего не делает, если не существует какой-либо кнопки "отправить".
По-видимому, это часть спецификация HTML 2.0:
Если в форме есть только одно однострочное текстовое поле ввода, пользовательский агент должен принять Enter в этом поле в качестве запроса на отправку формы.
Старая, но, по-видимому, все еще актуальная и интересная, дальнейшая дискуссия здесь.
... очевидно, подразумевается как удобный способ подачи простых запросов, но уменьшает риск в сложной форме досрочного представления его при попытке его заполнить. Многочисленные разработчики браузеров (например, Netscape, Opera, различные версии Lynx,...) последовали за этим советом, хотя, похоже, это несколько разные интерпретации.
Я сделал JSFiddle, чтобы продемонстрировать. Насколько я могу судить (лениво просто тестирование с помощью Chrome), форма будет отправляться на "enter", если есть только одно текстовое поле, или если есть кнопка отправки, даже если она скрыта.
(EDIT: позже я обнаружил, что он также работает, если есть другие поля ввода, которые не являются регулярным однострочным текстовым вводом... например, текстовыми полями, выбирает и т.д. - благодаря @user3292788 для эта информация. Обновлен JSFiddle, чтобы отразить это).
<h2>Form with one text field only, no submit button</h2>
<p>Seems to submit automatically when pressing 'enter' in the first text field</p>
<form action="" method="post">
<div>
<label for="pt-search-input">Search</label>
<div>
<input name="term" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a></div>
</div>
</form>
<h2>Form with two text fields, no submit button</h2>
<p>Won't submit when pressing 'enter' in the forms ...</p>
<form action="" method="post">
<div>
<label for="pt-search-input">Search</label>
<div>
<input name="term" type="text" placeholder="Example: budapest amsterdam" />
<input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a></div>
</div>
</form>
<h2>Form with two text fields and a submit button ...</h2>
<p>Now it submits with 'enter' key</p>
<form action="" method="post">
<div>
<label for="pt-search-input">Search</label>
<div>
<input name="term" type="text" placeholder="Example: budapest amsterdam" />
<input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a>
<input type="submit" />
</div>
</div>
</form>
<h2>Form with two text fields and a HIDDEN submit button ...</h2>
<p>Seems to work, even with submit hidden ...</p>
<form action="" method="post">
<div>
<label for="pt-search-input">Search</label>
<div>
<input name="term" type="text" placeholder="Example: budapest amsterdam" />
<input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a>
<input type="submit" />
</div>
</div>
</form>
<h2>Form with no action or method attribute, HIDDEN submit button ...</h2>
<p>Even this seems to work.</p>
<form>
<div>
<label for="search-input">Search</label>
<div>
<input name="term" type="text" placeholder="Example: budapest amsterdam" />
<input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a>
<input type="submit" />
</div>
</div>
</form>
<h2>Form with multiple fields, but only one text input, no submit button.</h2>
<p>This seems to work as well.</p>
<form action="" method="post">
<p><input type="text" ></p>
<textarea name="" id="" cols="30" rows="10"></textarea>
<p>
<select name="" id="">
<option value="">Value</option>
</select>
</p>
</form>
Он также может быть связан с привязкой javascript к <button>
в вашей форме. Например, если у вас есть
<button id='button'>Reset</button>
<span id="textToReset">some info</span>
<script type="text/javascript">
$('#button').bind('click', function(){
$('#textToReset').text('');
return false;
})
</script>
Ваша кнопка "Enter" будет помещена где-то с помощью return false
, и ваша форма не будет отправляться под клавишей Enter. Правильный способ - указать, что <button>
ACT как кнопка. Таким образом:
<button id='button' type="button">Reset</button>
и отпустите return false
, который вы положили туда, чтобы эта кнопка не отправила форму.; -)
Для обучения тип <button>
по умолчанию представляет. Если вы хотите, чтобы они выступали в качестве контроля для вашей формы, вы должны указать type="button"
или type="reset"
См. W3.org об этом
Если у вас есть правильная кнопка input-submit-button, но вы используете событие (click) для этой кнопки, оно не сработает при вводе. Очевидно, он отправит форму, но не вызовет событие нажатия кнопки. Использование функциональности для формирования самого себя и отправки события заставит его работать.
На всякий случай, если кто-то совершит ту же ошибку, что и я, и придет сюда в поисках ответа:
Если у вас есть две (или более) кнопки отправки 1 в форме, нажатие клавиши ввода вызовет только первую отправку, а не вторую.
1 как указано @paul-daoust в его комментарии к ответу @g-d-d-c: и <input type=submit>
, и <button type=submit>
будут работать как кнопка отправки