jQuery - форма не будет отправлена ​​с использованием jQuery - PullRequest
9 голосов
/ 01 марта 2012

В дополнение к моей проблеме здесь - jQuery при подтверждении отправки, с модальным диалоговым окном в конце?

Кажется, что форма просто не будет отправлена ​​с использованием jQuery.Вот мой код на очень упрощенном уровне:

<script type="text/javascript">

     $(document).ready(function(){
        $(document).click(function() {
            $('#inputform').submit();
        });

        $("#inputform").submit(function() {
            alert('test');
            return true;
        });
    });
</script>

<form method="POST" action="<?php echo CURRENT_PAGE ?>" id="inputform">

<button type="submit" name="submit" id="submit">Submit form</button>

</form>

При нажатии на тело отображается предупреждение «тест», но форма не отправляется.Кроме того, после закрытия окна предупреждения оно не будет появляться при повторном нажатии.

Простое нажатие на кнопку отправки само по себе отображает предупреждение, а затем отправляет форму, как и ожидалось.

Извинитечто является (я знаю) действительно глупым вопросом, но я в недоумении здесь.TY!

1 Ответ

24 голосов
/ 01 марта 2012

Проблема в том, что вы дали вашей кнопке отправки имя «отправить». Измените это на что-нибудь еще, и это будет работать. (Также измените id, лучше оставить их прежними, не в последнюю очередь из-за некоторых проблем с браузером .)

Почему: элементы формы имеют свойство с именем submit, которое вы можете вызывать для их отправки. (jQuery использует это под прикрытием, когда вы вызываете submit в экземпляре jQuery.) Но элементы формы также получают свойства для каждого из полей формы, используя имя поля, и поэтому, если у вас есть поле «submit», оно переопределяет функцию submit, что означает, что вы не можете отправить форму программно.

Рабочий пример: Живая копия | Живой источник

<script type="text/javascript">

     $(document).ready(function(){
        $(document).click(function() {
            $('#inputform').submit();
        });

        $("#inputform").submit(function() {
            alert('test');
            return true;
        });
    });
</script>

<form method="GET" action="http://jsbin.com/uwuzon" id="inputform">
<input type="text" name="foo" value="bar">
<button type="submit" name="someOtherName" id="someOtherName">Submit form</button>
</form>

(Значительное изменение - это часть name="someOtherName" id="someOtherName". Другие изменения [изменение действия и метода формы] относятся только к JSbin.)

Примечание: Вам не нужно return true; в обработчике submit, чтобы разрешить отправку формы. Вы просто должны не return false;. : -)

...