Jquery form ajax не отлавливает событие

Вот интересное поведение jquery form.
Уже много рас вставал на эти грабли а каждый раз хочу выяснить что именно не устраивает JS form.
Если загружать Jquery 1.10.2 в head то Jquery form не будет работать.
А вот если загрузить JS 1.10.2 рядом с Jquery form то всё работает.
То есть:

Не работает:
<head>
<script src ="Jquery1.10.2.js"></script>
</head>
<body>
<script src ="Jquery.form.js"></script>
</body>


РАБОТАЕТ:
<head>
</head>
<body>
<script src ="Jquery1.10.2.js"></script>
<script src ="Jquery.form.js"></script>
</body>


почему так?

1 ответов


Я вас возможно огорчу, но работает и в первом, и во втором случае, да и не может не работать. И даже если оба скрипта подключить после закрывающего тэга html, всё равно пашет. А вот то, на что надо обратить внимание, так это порядок подключения скриптов. И один важный момент, который вы не указали - это то, где вы инициализируете плагин. Т.е. строки аля:

$('#myForm').ajaxForm(function() {
    // some code
});
И тут опять можно поднять вопрос о порядке подключения и области видимости. Если инициализация происходит в коде выше подключаемого плагина , то его обязательно надо (да и вообще желательно) оборачивать в конструкцию DOM-Ready:
$(document).ready(function(){
     $('#myForm').ajaxForm(function() {
        // some code
    });
});
// или сокращенный вариант
$(function(){
     $('#myForm').ajaxForm(function() {
        // some code
    });
});

Но таких ситуаций надо избегать и стараться следовать следующему порядку:

  1. Библиотека (!обязательно первым)
  2. Плагин
  3. Код или файл, с инициализацией плагина.
  4. *подключать или в head, или до закрывающего тега body, после html-разметки и прочего. При чем для первого варианта - оберка DOM-Ready обязательна