Tôi muốn trì hoãn ajax bắn theo cùng một cách mà tự động hoàn thành dường như hoạt động. Ví dụ: nếu người dùng gõ, ajax sẽ không chạy cho đến khi hết 500ms kể từ lần khóa cuối cùng.
Tôi hiện đang xem drupal.behaviors nhưng không thể làm cho nó hoạt động.
Drupal.behaviors.mymodule = {
attach: function(context, settings) {
$('input.andtimer', context).delay(500).ajaxStart();
}
};
Đây là yếu tố hình thức mà hành vi được đính kèm.
$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 này cho thấy những gì tôi đang cố gắng để đạt được.
Would Làm thế nào để ghi đè Drupal.ajax.prototype.beforeSend? là một tuyến đường để đưa điều này xuống?
Các công việc sau đây cho 'bộ' đầu vào đầu tiên với lớp .andtimer. Nó không hoạt động cho bất kỳ bộ nào khác, ajax luôn tiếp tục với bộ đầu tiên. Bất kỳ ý tưởng làm thế nào để sửa lỗi này?
(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);
Sử dụng $ form ['my_input'] ['# ajax'] ['event'] = 'finishinput' như đề xuất và
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);
}
});
Hoạt động cho từng 'nhóm' đầu vào trong đó cần phải thu được số lượng đầu vào đầy.