Почему jQuery .submit не работает?

#jquery #form-submit

#jquery #форма-отправить

Вопрос:

Я почти час пытался выяснить, как выполнить некоторую проверку перед отправкой формы. Моя форма выглядит так:

 <!doctype html>
<head>
<title>sample</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js">      </script>
<script>
 $("#myform").submit(function() {
   alert("it is not working");
   return false;
 });
</script>
</head>
<body>
  <form id="myform">
   <input id="foo" value="Change me and press enter"/>
   <input type="submit" />
  </form>
</body>
</html>
  

Он не работает в IE, Chrome FF 🙁
Должно быть, я делаю что-то ужасно неправильное, но что?

Редактировать

Рабочий пример:

 <!doctype html>
<head>
<title>sample</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"> </script>
<script>
    $(document).ready(function() {
    $("#myform").submit(function() {
        alert("Now it is def working!");
        return false;
    });
});
</script>
</head>
<body>
<div id="myform">
<form id="myform">
    <input id="foo" value="Change me and press enter"/>
    <input type="submit" />
</form>
</div>
</body>
</html>
  

Комментарии:

1. Ваш текст предупреждения неверен. Когда он сообщает вам «это не работает», на самом деле это означает «это работает».

2. Определите «это не работает». (Что, по-видимому, является плохим выбором для текста предупреждения, поскольку, если текст отображается, это означает, что JavaScript работает .)

3. @TomalakGeret’kal HA B-)

4. Нам нужно найти главный вопрос для этих слишком локализованных вопросов «попытка использовать элемент DOM до его существования».

5. @Tomalakgeret’kal ах, но какой именно?

Ответ №1:

Оберните это в готовую функцию:

 $(function(){
   $("#myform").submit(function() {
      alert("THIS IS WORKING!!!!!!");
      return false;
   });
});
  

Вам нужно обернуть это в готовую функцию, потому что там, где сейчас находится ваша функция, элемент DOM #myForm не существует, поэтому вы прикрепляете обработчик к несуществующему элементу.

Функция ready ожидает загрузки DOM, а затем запускает все внутри готового завершения.

Комментарии:

1. @Tomalakgeret’kal добавил объяснение:-P

2. @Neal: Бах, и теперь мое остроумие спорно!

3. @Tomalakgeret’kal он все еще там ^_^ только в немного меньшей форме 😀