Ich möchte Ajax daran hindern, auf die gleiche Weise zu feuern, wie die automatische Vervollständigung zu funktionieren scheint. Wenn ein Benutzer beispielsweise tippt, wird der Ajax erst ausgeführt, nachdem seit der letzten Eingabe 500 ms verstrichen sind.
Ich schaue gerade auf drupal.behaviors, kann es aber nicht zum Laufen bringen.
Drupal.behaviors.mymodule = {
attach: function(context, settings) {
$('input.andtimer', context).delay(500).ajaxStart();
}
};
Dies ist das Formularelement, an das das Verhalten angehängt ist.
$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'),
),
);
Diese jsfiddle zeigt, was ich erreichen will .
Würde Drupal.ajax.prototype.beforeSend überschrieben? ein Weg sein, dies zu beseitigen?
Das Folgende funktioniert für den ersten 'Satz' von Eingaben mit der Klasse .andtimer. Es funktioniert bei keinem anderen Satz, der Ajax fährt immer mit dem ersten Satz fort. Irgendwelche Ideen, wie man das behebt?
(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);
Verwenden von $ form ['my_input'] ['# ajax'] ['event'] = 'finishinput' wie vorgeschlagen und
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);
}
});
Funktioniert für jede 'Gruppe' von Eingaben, bei denen die Anzahl der gefüllten Eingaben ermittelt werden muss.