Javascript 这一切都可以正常工作,但该按钮从未启用
这一切似乎都起作用,但按钮(bSaveNewTag)从未启用。通过它,我猜countTag没有及时填充,但我不知道如何让它等待返回值 我已经通过了警报,得出了上述结论,但我对Javascript的知识非常基础,所以不知道该做什么,在搜索答案时,我发现了什么,我不理解也不知道如何实现Javascript 这一切都可以正常工作,但该按钮从未启用,javascript,ajax,asynchronous,Javascript,Ajax,Asynchronous,这一切似乎都起作用,但按钮(bSaveNewTag)从未启用。通过它,我猜countTag没有及时填充,但我不知道如何让它等待返回值 我已经通过了警报,得出了上述结论,但我对Javascript的知识非常基础,所以不知道该做什么,在搜索答案时,我发现了什么,我不理解也不知道如何实现 function checkIfNewTagExists(potentialTag) { var countTag = 0; $.ajax({
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);
}
});
}
现在,我可以看到
返回false在checkNewTag
的最后一行else
中的code>。如果您打算将某些内容返回到调用行,那么还应该使用回调函数,而不是var x=checkNewTag()代码>您在宽限期内编辑了它,但仍然-不要在您的帖子中添加垃圾文本以绕过要求您解释更多问题的要求-相反,请实际更详细地解释问题,例如您尝试过的哪种调试不起作用。它也有助于查找如何创建一个与问题不直接相关的-考虑修剪代码。当您使用<代码> Ajax < /C> >时,它不会使用<代码>返回< /代码>关键字返回结果。您应该尝试使用回调函数。您正在根据使用ajax的checkIfNewTagExists
的结果启用/禁用该按钮。您的返回countTag
不会通过调用checkIfNewTagExists
真正返回值,它只将值返回给调用complete
回调函数(即ajax调用)的函数。