Xin chào tất cả. Tôi có một biểu mẫu được gửi từ xa khi các yếu tố khác nhau thay đổi. Trên một lĩnh vực tìm kiếm đặc biệt tôi đang sử dụng một keyup để phát hiện khi các văn bản trong lĩnh vực này thay đổi. Vấn đề với điều này là khi một người nào đó gõ "gà" thì biểu mẫu được gửi bảy lần, chỉ với lần đếm cuối cùng.(jquery/js) - nhận văn bản từ trường trên khóa, nhưng với độ trễ để nhập thêm
Điều gì sẽ là tốt hơn là một cái gì đó giống như
KeyUp này phát hiện - bắt đầu chờ đợi (trong một giây)
khác KeyUp phát hiện - khởi động lại chờ đợi thời gian
kết thúc chờ đợi - nhận giá trị và gửi biểu mẫu
trước khi tôi đi và mã phiên bản riêng của tôi về điều này (tôi thực sự là một anh chàng phụ trợ với chỉ một chút js, tôi sử dụng jquery cho tất cả mọi thứ), là đã có một giải pháp hiện tại này? Có vẻ như nó sẽ là một yêu cầu chung. Một plugin jquery có thể? nếu không, cách đơn giản nhất và tốt nhất để viết mã này là gì?
cảm ơn, max
CẬP NHẬT - mã hiện gia tăng đối với Dan (dưới đây)
Dan - điều này có thể có liên quan. Một trong những plugin jquery mà tôi đang sử dụng trên trang (tablesorter) yêu cầu tệp này - "tablesorter/jquery-latest.js", nếu có, dẫn đến lỗi tương tự với mã của bạn như trước:
jQuery ("input # search"). dữ liệu ("timeout", null) không được xác định http://192.168.0.234/javascripts/main.js?1264084467 Dòng 11
Có thể có một số loại xung đột giữa các định nghĩa jquery khác nhau? (hoặc một cái gì đó)
$(document).ready(function() {
//initiate the shadowbox player
// Shadowbox.init({
// players: ['html', 'iframe']
// });
});
jQuery(function(){
jQuery('input#search')
.data('timeout', null)
.keyup(function(){
jQuery(this).data('timeout', setTimeout(function(){
var mytext = jQuery('input#search').val();
submitQuizForm();
jQuery('input#search').next().html(mytext);
}, 2000)
)
.keydown(function(){
clearTimeout(jQuery(this).data('timeout'));
});
});
});
function submitQuizForm(){
form = jQuery("#searchQuizzes");
jQuery.ajax({
async:true,
data:jQuery.param(form.serializeArray()),
dataType:'script',
type:'get',
url:'/millionaire/millionaire_quizzes',
success: function(msg){
// $("#chooseQuizMainTable").trigger("update");
}
});
return true;
}
bên trong hàm setTimeout bạn có thể có thể thay đổi jQuery ('# myElement') để jQuery (this) –
Cảm ơn dan - nó rơi xuống tại .data đầu tiên ('timeout', null), nói rằng nó không phải là một hàm. Tôi có phải làm gì khác trước khi tôi có thể gọi .data không? Tôi đang gọi nó trên một trường văn bản trong trường hợp này. –
Max, bạn có chắc chắn rằng bạn đã đưa thư viện jQuery vào và thay đổi # myelement thành bộ chọn phần tử của riêng bạn không? Tôi đã chỉ cho nó một thử nghiệm nhanh chóng và nó làm việc tại chỗ trên :) Dan –