Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这一切都可以正常工作,但该按钮从未启用_Javascript_Ajax_Asynchronous - Fatal编程技术网

Javascript 这一切都可以正常工作,但该按钮从未启用

Javascript 这一切都可以正常工作,但该按钮从未启用,javascript,ajax,asynchronous,Javascript,Ajax,Asynchronous,这一切似乎都起作用,但按钮(bSaveNewTag)从未启用。通过它,我猜countTag没有及时填充,但我不知道如何让它等待返回值 我已经通过了警报,得出了上述结论,但我对Javascript的知识非常基础,所以不知道该做什么,在搜索答案时,我发现了什么,我不理解也不知道如何实现 function checkIfNewTagExists(potentialTag) { var countTag = 0; $.ajax({

这一切似乎都起作用,但按钮(bSaveNewTag)从未启用。通过它,我猜countTag没有及时填充,但我不知道如何让它等待返回值

我已经通过了警报,得出了上述结论,但我对Javascript的知识非常基础,所以不知道该做什么,在搜索答案时,我发现了什么,我不理解也不知道如何实现

function checkIfNewTagExists(potentialTag) {
            var countTag = 0;

            $.ajax({
                url: "/CSC/api/checkTag/" + potentialTag + "/",
                dataType: "json",
                success: function (data) {
                    $.map(data, function (item) {
                        countTag = parseInt(item.cTag, 10);
                    });
                },
                complete: function () {

                    if (countTag > 0) {
                        $('#newTag').css({ 'opacity': 1 });
                        $('#tbNewTagName').addClass("missing");
                    } else {
                        $('#newTag').css({ 'opacity': 0 });
                    }

                    return countTag;
                }
            });
        }

        function checkNewTag() {
            var countTag = 0;
            var potentialTag = '';
            var val = Page_ClientValidate("vgNewTag");
            var el = $("#bSaveNewTag")

            for (i = 0; i < Page_Validators.length; i++) {
                if (Page_Validators[i].isvalid) {
                    $("#" + Page_Validators[i].controltovalidate).removeClass("missing");
                } else {
                    $("#" + Page_Validators[i].controltovalidate).addClass("missing");
                }
            }

            potentialTag = $('#tbNewTagName').val();
            if (potentialTag == '') {
                countTag = 1;
            } else {
                countTag = checkIfNewTagExists(potentialTag);
            }

            if (val && countTag === 0) {
                el.prop("disabled", false);
            } else {
                el.prop("disabled", true);
                return false;
            }
        }
函数checkIfNewTagExists(潜在标签){
var countTag=0;
$.ajax({
url:“/CSC/api/checkTag/”+potentialTag+“/”,
数据类型:“json”,
成功:功能(数据){
$.map(数据、功能(项){
countTag=parseInt(item.cTag,10);
});
},
完成:函数(){
如果(计数标签>0){
$('#newTag').css({'opacity':1});
$('tbNewTagName').addClass(“缺少”);
}否则{
$('#newTag').css({'opacity':0});
}
返回计数标签;
}
});
}
函数checkNewTag(){
var countTag=0;
var potentialTag='';
var val=第页客户验证(“vgNewTag”);
变量el=$(“#bSaveNewTag”)
对于(i=0;i
如果您不理解我上面的评论或我引用的文章,下面是您应该做的工作的分解

function checkIfNewTagExists(potentialTag, callback) {
    var countTag = 0;

    $.ajax({
        url: "/CSC/api/checkTag/" + potentialTag + "/",
        dataType: "json",
        success: function (data) {
            $.map(data, function (item) {
                countTag = parseInt(item.cTag, 10);
            });
        },
        complete: function () {
            if (countTag > 0) {
               $('#newTag').css({ 'opacity': 1 });
                $('#tbNewTagName').addClass("missing");
            } else {
                $('#newTag').css({ 'opacity': 0 });
            }

            //return countTag;
            callback(countTag);
        }
    });
}
那么这部分,

potentialTag = $('#tbNewTagName').val();
if (potentialTag == '') {
    countTag = 1;
} else {
    countTag = checkIfNewTagExists(potentialTag);
}

if (val && countTag === 0) {
    el.prop("disabled", false);
} else {
    el.prop("disabled", true);
    return false;
}
应该是这样的:

potentialTag = $('#tbNewTagName').val();
if (potentialTag == '') {
    countTag = 1;
    el.prop("disabled", true);
} else {
    //countTag = checkIfNewTagExists(potentialTag);
    checkIfNewTagExists(function(cTag){
        countTag = cTag;

        if (val && countTag === 0) {
            el.prop("disabled", false);
        } else {
            el.prop("disabled", true);
        }
    });
}

现在,我可以看到
返回falsecheckNewTag
的最后一行
else
中的code>。如果您打算将某些内容返回到调用行,那么还应该使用回调函数,而不是
var x=checkNewTag()

您在宽限期内编辑了它,但仍然-不要在您的帖子中添加垃圾文本以绕过要求您解释更多问题的要求-相反,请实际更详细地解释问题,例如您尝试过的哪种调试不起作用。它也有助于查找如何创建一个与问题不直接相关的-考虑修剪代码。当您使用<代码> Ajax < /C> >时,它不会使用<代码>返回< /代码>关键字返回结果。您应该尝试使用回调函数。您正在根据使用ajax的
checkIfNewTagExists
的结果启用/禁用该按钮。您的
返回countTag
不会通过调用
checkIfNewTagExists
真正返回值,它只将值返回给调用
complete
回调函数(即ajax调用)的函数。