функция onsubmit не вызывается

#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 . Это также доказывает, что не было никакой ошибки кодирования, а просто функция вообще не вызывалась.

Если вы все же найдете решение предыдущей проблемы, дайте мне знать, потому что это немного утомительный и интенсивный код.