Vorrei ritardare il lancio di Ajax nello stesso modo in cui il completamento automatico sembra funzionare. Ad esempio, se un utente sta digitando, ajax non verrà eseguito fino a quando non sono trascorsi 500 ms dall'ultimo keyup.
Attualmente sto guardando drupal.behaviors ma non sono in grado di farlo funzionare.
Drupal.behaviors.mymodule = {
attach: function(context, settings) {
$('input.andtimer', context).delay(500).ajaxStart();
}
};
Questo è l'elemento del modulo a cui è associato il comportamento.
$form['my_input'] = array(
'#type' => 'textfield',
'#default_value' => $value,
'#ajax' => array(
'callback' => 'my_callback',
'event' => 'keyup',
'wrapper' => 'my_wrapper',
'trigger_as' => array(
'name' => 'my_button',
),
'progress' => array('type' => 'none'),
),
'#attributes' => array(
'class' => array('andtimer'),
),
);
Questo jsfiddle mostra ciò che sto cercando di ottenere.
Sarebbe Come ignorare Drupal.ajax.prototype.beforeSend? essere un percorso per abbatterlo?
Quanto segue funziona per il primo "set" di input con la classe .andtimer. Non funziona per nessun altro set, l'ajax continua sempre con il primo set. Qualche idea su come risolvere questo problema?
(function($, Drupal) {
Drupal.behaviors.bform = {
attach : function(context, settings) {
var events = $('.andtimer').clone(true).data('events');
$('.andtimer').unbind('keyup');
var typingTimer;
var doneTypingInterval = 300;
$('.andtimer').keyup(function() {
clearTimeout(typingTimer);
typingTimer = setTimeout(doneTyping, doneTypingInterval);
function doneTyping() {
$.each(events.keyup, function() {
this.handler();
});
}
return false;
});
}
};
})(jQuery, Drupal);
Utilizzando $ form ['my_input'] ['# ajax'] ['event'] = 'finitoinput' come suggerito e
var typingTimer;
var doneTypingInterval = 600;
$('.andtimer').on('keyup', function (e) {
clearTimeout(typingTimer);
if ($(this).val) {
var trigid = $(this);
typingTimer = setTimeout(function(){
trigid.triggerHandler('finishedinput');
}, doneTypingInterval);
}
});
Funziona per ogni "gruppo" di input in cui è necessario ottenere il conteggio degli input riempiti.