[英]Setting UP second setTimeout function won't execute JQUERY and AJAX
// Cart Code for Updating Database Quantity $('.input-text').on('keydown ' , function(){ var tr_parent = $(this).closest("tr"); setTimeout(function () { $(tr_parent).css('opacity', '0.3'); }, 4000); var input_value = $(this).val(); var input_value_length = input_value.length; var product_id_update = $("#product_id").attr('data'); if(input_value_length > 0 ) { // Setting up time to execute jquery setTimeout(function () { $.ajax({ url: "includes/ajax_code.php", data:{input_value:input_value, product_id_update : product_id_update}, type: "POST", success:function(data) { $(tr_parent).css('opacity', '0.9'); } }); }, 5000); } });
这里的代码使输入元素的不透明度变为0.3,只是为了向用户提供数据传输的指示,我的问题是,当我在AJAX的成功区域中设置第二个函数setTimeout时,它不会执行。
因此,输入始终保持不透明度或0.3,而不是AJAX完成后变为0.9。
我认为您应该在调用ajax之前立即将第一个不透明度设置为0.3,以指示开始加载某些内容。 并在成功/错误/完成回调中将其设置回0.9。
$('.input-text').on('keydown change', function() {
var table_row = $(this).closest("tr");
// $(table_row).css('opacity', '0.3');
var input_value = $(this).val();
var input_value_length = input_value.length;
var product_id_update = $("#product_id").attr('data');
if (input_value_length > 0) {
$(table_row).css('opacity', '0.3');//<-- move here
$.ajax({
...
...
and in success callback, set it back to 0.9...either instantly or with a slight delay, doesnt matter.
注意:似乎您正在尝试在每次按键时提交数据,这可能有点低效。 我认为您应该“限制”这个ajax函数。 当用户编辑输入(例如1秒钟)时,设置一个计时器。 当时间用完时,使用ajax发送输入值。 当用户键入另一个字母时,计时器将重置,因此,仅当用户完成至少一秒钟的输入时才触发ajax。 其简单的优化。
*编辑-创建了jsfiddle演示以展示应如何完成*演示-http: //jsfiddle.net/rainerpl/49mjkagv/
<input type="text" class="input-text">
<img src="http://www.minefornine.com/pages/tpl/front/images/ajax_loader_big.gif" style="width: 24px; float: left;display: none;" id="loader" >
$(document).ready(function() {
var input = $('.input-text');
var timer;
var loader = $("#loader");
var loadStuff = function() {
//input changed - set opacity to 0.4 to indicate loading
input.css("opacity", 0.4);
loader.show();
setTimeout(function() {
//loading finished
input.css("opacity", 1);
loader.hide();
}, 2000);//<--simulates ajax call
};
input.on('keydown ' , function() {
if ( timer ) {clearTimeout(timer);}
timer = setTimeout(loadStuff, 1000);;
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.