Всем привет подскажите, как сделать задержку срабатывания сабмита пока в текстовое поле не будет введено 3 буквы Код (Javascript): Drupal.behaviors.CToolsAutoSubmit = { attach: function(context) { // 'this' references the form element function triggerSubmit (e) { if ($.contains(document.body, this)) { var $this = $(this); if (!$this.hasClass('ctools-ajaxing')) { $this.find('.ctools-auto-submit-click').click(); } } } // the change event bubbles so we only need to bind it to the outer form $('form.ctools-auto-submit-full-form', context) .add('.ctools-auto-submit', context) .filter('form, select, input:not(:text, :submit)') .once('ctools-auto-submit') .change(function (e) { // don't trigger on text change for full-form if ($(e.target).is(':not(:text, :submit, .ctools-auto-submit-exclude)')) { triggerSubmit.call(e.target.form); } }); // e.keyCode: key var discardKeyCode = [ 16, // shift 17, // ctrl 18, // alt 20, // caps lock 33, // page up 34, // page down 35, // end 36, // home 37, // left arrow 38, // up arrow 39, // right arrow 40, // down arrow 9, // tab 13, // enter 27 // esc ]; // Don't wait for change event on textfields $('.ctools-auto-submit-full-form input:text, input:text.ctools-auto-submit', context) .filter(':not(.ctools-auto-submit-exclude)') .once('ctools-auto-submit', function () { // each textinput element has his own timeout var timeoutID = 0; $(this) .bind('keydown keyup', function (e) { if ($.inArray(e.keyCode, discardKeyCode) === -1) { timeoutID && clearTimeout(timeoutID); } }) .keyup(function(e) { if ($.inArray(e.keyCode, discardKeyCode) === -1) { timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500); } }) .bind('change', function (e) { if ($.inArray(e.keyCode, discardKeyCode) === -1) { timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500); } }); }); } } })(jQuery);
Fell-x27, да все правильно, там автосабмит срабатывает сразу, и выдает ошибку, потому что дальше скрипт начинает работать только с 3 х символов, вот только пока не понял как приладить скрипты друх к другу --- Добавлено --- вот эта часть работает Код (Text): .keyup(function(e) { if ($.inArray(e.keyCode, discardKeyCode) === -1) { timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500); } а this[0] undefine --- Добавлено --- сначала так Код (Text): Возникла AJAX HTTP ошибка. Полученный код HTTP: 500 Следует отладочная информация. Путь: /views/ajax Текст Состояния: Service unavailable (with message) Текст Ответа: PDOException: You cannot serialize or unserialize PDO instances в функции DrupalDatabaseCache->set() (строка 455 в файле /var/www/dru.home/includes/cache.inc). потом так Код (Text): Необходимо указать не менее одного ключевого слова, состоящего из 3 или более букв.
@Fell-x27, я глянул в его код, и там увидел что-то связанное с автосабмитом и предложил такой вариант. Как я и думал, он его легко переделал под свой лад.