За последние 24 часа нас посетили 20039 программистов и 1712 роботов. Сейчас ищут 1515 программистов ...

jQuery validation и формы, которые загружатся то ajax

Тема в разделе "JavaScript и AJAX", создана пользователем Ігор, 18 фев 2010.

  1. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Собственно проблама проверки формы средствами jQuery validation форм, которые загружаются ajax. Сразу отмечу некоторые моменты.
    • работаю на Code Igniter. (Серверный пхп фреймворк, если кто не знает)
      Для Слежения за уникальностью подключаемых скриптов следит специальный класс
      По ajax я загружаю/обрабатываю только формы
      Как было уже сказано, использую jQuery. он у меня побключен постоянно, так как и jQuryUI
      Дополнительные плагины, типа проверки формы и её отправки, я решил подключать по мере необходимости
    Тут и возникают трудности. По ajax я гружу в плавающий div, вернее виджет диалог, например такую форму
    PHP:
    1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    2. $this->load->helper(array('language', 'form'));
    3. $this->lang->load('user');
    4. echo $this->gears->singlejs('validation');
    5. ?>
    6.  
    7. <script type="text/javascript">
    8.     $().ready(function() {
    9.  
    10.         // validate signup form on keyup and submit
    11.         $("#register").validate({
    12.             rules: {
    13.                 username:
    14.                     {
    15.                     required: true,
    16.                     minlength: 3
    17.                 },
    18.                 userpass:
    19.                     {
    20.                     required: true,
    21.                     minlength: 6
    22.                 }
    23.             },
    24.             submitHandler: function()
    25.             {
    26.                 formgears('register');
    27.             }
    28.         });
    29.     })
    30. </script>
    31. <form action="<?= part_url('register.htm') ?>" method="POST" id="register">
    32.     <div class="field">
    33.         <?= form_labelinput('username', set_value('username'), 'user_name') ?>
    34.     </div>
    35.     <div class="field">
    36.         <?= form_labelinput('userpass', '', 'user_pass') ?>
    37.     <div class="right">
    38.         <button class="ui-state-default ui-corner-all" type="submit" style="padding:3px; margin:5px">Отправить</button>
    39.     </div>
    40. </form>
    Немного, конечно сократил код.
    Меня смущает, что в блоке, который грузиться ajax присутствует
    [js] $().ready(function() {[/js]
    Так нормально, или нет? В теле документа уже встречается такая конструкция. Это работает, но насколько это правильно.
    Дальше такая конструкция
    PHP:
    1. echo $this->gears->singlejs('validation');
    Класс, конечно, отследил, чтобы второй раз нигде не подключил (вернёт пустую строку) Но, если я вызову эту форму по ajax ещё раз получится, что я подключаю плагины повторно? Я же не смогу отследить, какие скрипты я подключил за предыдущим запросом.
    Думаю вопрос это давно решён, только я нигде не встречал решения. Надеюсь на вашу помощь.
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ты можешь отследить ajax запрос это или нет.

    Соответсвенно при аякс запросе не подключать ничего.
     
  3. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    В каком смысле ничего?
    Никаких js библиотек?
    Ну хорошо, А как тогда можно подгрузить вместе с формой правила для её проверки?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну так и подключай только то, что считаешь нужным.
     
  5. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    :shock:
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ігор
    В чем вопрос? Не подключать библиотеку при аякс запросе?
    Ну так и не подключай. Определить аякс или нет - возможно.

    Нужно подключить валидаторы в любом случае? Ну так и подключай.

    Где ты споткнулся?
     
  7. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Так я потому и спрашиваю. Зачем мне валидаторы, если нет форм. Может целесообразно подключить валидаторы, только когда есть форма?
    Если мне понадобиться, 10 или 20 плагинов jQ не подключать все их же. На одной странице одни, на другой нужны другие.
    Споткнулся в основном на вот этом.
    Код (Text):
    1. <script type="text/javascript">
    2.      $().ready(function() {
    такой участок грузиться по ajax. Это нормально. Если нет, как это избежать.
    Правила проверки формы обязательно должны загружаться с ней.
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Определили аякс или нет. Конструкцией if () пользоваться умеем?
    Вот с ее помощью это и разруливается.

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

    Далее по коду подключаешь только свой(пользовательский) скрипт, типа валидаторов там где надо и т.д.
     
  9. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    >Определили аякс или нет. Конструкцией if () пользоваться умеем?
    Это где в php или js?
    Пример можно?
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В php вестимо.

    Конечно можно
    $this->getRequest()->isXmlHttpRequest()

    :) за исходниками или в ZendFramework или в гугл :) jQuery посылает некоторые заголовки при аякс запросах. Вот их и надо смотреть.
     
  11. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Но все-равно. Когда форма будет загружена, необходимо добавить обработчик события отправки формы. Вот как это нормально сделать?
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Элементарно Ватсон!

    В подгружаемом html
    [js]$(document).ready(function() {
    // добавляем обработчик
    })[/js]
     
  13. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    :D :D
    Так я же и спрашивал в начале можно ли так :D :D :D
    PS: А какие заголовки надо отправить, чтобы браузер закешировал js?
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Гм. Ну у тебя же работало. Что ты еще хотел?
    Спросить у нас разрешения? :) Зачем?

    За заголовками в поиск.
     
  15. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0