#javascript #function #onsubmit
#javascript #функция #onsubmit
Вопрос:
Я разрабатываю окно рассылки, основанное на AJAX. http://businessgame.be/shoutbox.php
Скрипт отлично работает в Google Chrome, но другие браузеры работают не так, как я ожидаю.
Для отправки нового сообщения существует форма, которой принадлежит текстовое поле ввода. При нажатии enter форма отправляется, поэтому я опустил кнопку отправки, поскольку достаточно нажать enter.
<form method="POST" action="" onsubmit="javascript: return shout();" enctype="multipart/form-data">
<input type="text" style="width: 100%;" name="txtShout" id="txtShout" maxlength="600" autocomplete="off" title="Shout!" placeholder="Shout!">
</form>
Функция shout выглядит следующим образом:
function shout() {
alert("test");
// Post shout and clear textField
if(getLength("txtShout")) {
AjaxUpdate("./includes/shout.php?message=" getItemValue("txtShout"), refreshShoutBox);
setItemValue("txtShout", "");
}
// Stop submit
return false;
}
Обычно скрипт должен вызывать функцию shout, AJAX отправляет запрос на добавление shout, а затем возвращает false, чтобы форма не была отправлена.
Но во всех браузерах, кроме Google Chrome, форма все равно отправляется. Я ввел alert() в функцию, чтобы проверить, была ли она вызвана или ошибка кодирования, но предупреждение не отображается.
Комментарии:
1. Вы пробовали onsubmit=»return shout();» без «javascript:»?
2. Да, это не решает проблему. Предупреждение даже не отображается, поэтому я предполагаю, что браузер просто пропускает оператор onsubmit… Я также попытался изменить функцию только на оповещение, но это не работает:/.
3. В этом случае, похоже, вам следует проверить это с помощью Firebug. Вы можете использовать консоль firebug для поиска ошибок JavaScript.
4. Это просто не дает никакой дополнительной информации, функция не вызывается, ошибка не выдается или что-то в этом роде…
5. Должна быть какая-то ошибка. Синтаксис для ее привязки правильный, поэтому в JS должна быть какая-то ошибка, которую Chrome допустит, а другие браузеры — нет (или используется что-то, что существует только в Chrome). Кроме того, если есть ошибка, ее может даже не быть в этой функции, и она все равно может повлиять на эту функцию.
Ответ №1:
Ну, по какой-то причине я не смог заставить функцию onsubmit работать в других браузерах. Вместо того, чтобы отчаянно пытаться это исправить, я решил использовать другой подход. Теперь я просто добавил прослушиватель в текстовое поле, чтобы проверить, когда нажата клавиша, если это была клавиша ввода, а затем вызвать эту функцию.
Это, похоже, сработало, но все равно пришлось удалить форму, потому что в противном случае она была бы отправлена ^^.
Итак, теперь я получил что-то вроде этого:
function shoutEnterListener() {
// Get object
var domObject = document.getElementById("txtShout");
// Get shoutbox html code
if(domObject) {
domObject.onkeydown = shoutEnter;
domObject.onkeypress = shoutEnter;
}
}
function shoutEnter(e) {
var keyCode;
// Check which key has been pressed
if (window.event) {
keyCode = window.event.keyCode;
} else {
keyCode = e.which;
}
// If enter, shout!
if (keyCode == 13) {
shout();
}
}
Функция shoutEnterListener() вызывается в функции init . Это также доказывает, что не было никакой ошибки кодирования, а просто функция вообще не вызывалась.
Если вы все же найдете решение предыдущей проблемы, дайте мне знать, потому что это немного утомительный и интенсивный код.