繁体   English   中英

设置UP第二个setTimeout函数将不会执行JQUERY和AJAX

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM