Saya ingin menunda ajax dari menembak dengan cara yang sama bahwa autocomplete tampaknya berfungsi. Misalnya, jika pengguna mengetik, ajax tidak akan berjalan hingga 500ms telah berlalu sejak keyup terakhir.
Saat ini saya sedang melihat drupal.behaviors tetapi tidak dapat membuatnya berfungsi.
Drupal.behaviors.mymodule = {
attach: function(context, settings) {
$('input.andtimer', context).delay(500).ajaxStart();
}
};
Ini adalah elemen bentuk tempat perilaku dilampirkan.
$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'),
),
);
Jsfiddle ini menunjukkan apa yang saya coba capai.
Apakah Cara mengganti Drupal.ajax.prototype.beforeSend? menjadi rute untuk mencatat ini?
Berikut ini berfungsi untuk 'set' input pertama dengan class .andtimer. Itu tidak bekerja untuk set lain, ajax selalu berlanjut dengan set pertama. Ada ide bagaimana cara memperbaikinya?
(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);
Menggunakan $ form ['my_input'] ['# ajax'] ['event'] = 'finishedinput' seperti yang disarankan dan
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);
}
});
Berfungsi untuk setiap 'kelompok' input di mana jumlah input yang diisi perlu diperoleh.