За последние 24 часа нас посетили 18704 программиста и 1650 роботов. Сейчас ищут 1762 программиста ...

AutoSubmit

Тема в разделе "JavaScript и AJAX", создана пользователем oleg_, 24 янв 2017.

  1. oleg_

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

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    Всем привет
    подскажите, как сделать задержку срабатывания сабмита пока в текстовое поле не будет введено 3 буквы
    Код (Javascript):
    1. Drupal.behaviors.CToolsAutoSubmit = {
    2.   attach: function(context) {
    3.     // 'this' references the form element
    4.     function triggerSubmit (e) {
    5.       if ($.contains(document.body, this)) {
    6.         var $this = $(this);
    7.         if (!$this.hasClass('ctools-ajaxing')) {
    8.           $this.find('.ctools-auto-submit-click').click();
    9.         }
    10.       }
    11.     }
    12.  
    13.     // the change event bubbles so we only need to bind it to the outer form
    14.     $('form.ctools-auto-submit-full-form', context)
    15.       .add('.ctools-auto-submit', context)
    16.       .filter('form, select, input:not(:text, :submit)')
    17.       .once('ctools-auto-submit')
    18.       .change(function (e) {
    19.         // don't trigger on text change for full-form
    20.         if ($(e.target).is(':not(:text, :submit, .ctools-auto-submit-exclude)')) {
    21.           triggerSubmit.call(e.target.form);
    22.         }
    23.       });
    24.  
    25.     // e.keyCode: key
    26.     var discardKeyCode = [
    27.       16, // shift
    28.       17, // ctrl
    29.       18, // alt
    30.       20, // caps lock
    31.       33, // page up
    32.       34, // page down
    33.       35, // end
    34.       36, // home
    35.       37, // left arrow
    36.       38, // up arrow
    37.       39, // right arrow
    38.       40, // down arrow
    39.        9, // tab
    40.       13, // enter
    41.       27  // esc
    42.     ];
    43.     // Don't wait for change event on textfields
    44.     $('.ctools-auto-submit-full-form input:text, input:text.ctools-auto-submit', context)
    45.       .filter(':not(.ctools-auto-submit-exclude)')
    46.       .once('ctools-auto-submit', function () {
    47.         // each textinput element has his own timeout
    48.         var timeoutID = 0;
    49.         $(this)
    50.           .bind('keydown keyup', function (e) {
    51.             if ($.inArray(e.keyCode, discardKeyCode) === -1) {
    52.               timeoutID && clearTimeout(timeoutID);
    53.             }
    54.           })
    55.           .keyup(function(e) {
    56.             if ($.inArray(e.keyCode, discardKeyCode) === -1) {
    57.               timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500);
    58.             }
    59.           })
    60.           .bind('change', function (e) {
    61.             if ($.inArray(e.keyCode, discardKeyCode) === -1) {
    62.               timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500);
    63.             }
    64.           });
    65.       });
    66.   }
    67. }
    68. })(jQuery);
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Воу. Ты уверен, что автор просит автосабмит если введено 3 символа?)
     
  4. oleg_

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

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    Fell-x27, да все правильно, там автосабмит срабатывает сразу, и выдает ошибку, потому что дальше скрипт начинает работать только с 3 х символов, вот только пока не понял как приладить скрипты друх к другу
    --- Добавлено ---
    вот эта часть работает
    Код (Text):
    1. .keyup(function(e) {
    2.             if ($.inArray(e.keyCode, discardKeyCode) === -1) {
    3.               timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500);
    4.             }
    а this[0] undefine
    --- Добавлено ---
    сначала так
    Код (Text):
    1. Возникла AJAX HTTP ошибка.
    2. Полученный код HTTP: 500
    3. Следует отладочная информация.
    4. Путь: /views/ajax
    5. Текст Состояния: Service unavailable (with message)
    6. Текст Ответа: PDOException: You cannot serialize or unserialize PDO instances в функции DrupalDatabaseCache->set() (строка 455 в файле /var/www/dru.home/includes/cache.inc).
    потом так
    Код (Text):
    1. Необходимо указать не менее одного ключевого слова, состоящего из 3 или более букв.
     
  5. oleg_

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

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    вот так заработала
    Код (Text):
    1. var lng=this.textLength
    2.             if (lng > 2 | lng < 1)
    mahmuzar спасибо
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Fell-x27, я глянул в его код, и там увидел что-то связанное с автосабмитом и предложил такой вариант. Как я и думал, он его легко переделал под свой лад.