我正在尝试使用JavaScript来验证输入字段,特别是在写入值之前检查数据库中的重复值。用户在输入中键入新字符串,然后单击“添加”按钮。下面的脚本从输入中获取值,然后在采取进一步操作之前检查数据库是否有重复值。
$("#add").click(
function() {
var elem = $(this).prev().get(0);
var string = String($(elem).val());
if (string.length > 0)
{
var flag = false;
var type = $(this).attr("data-type");
var URL = getDataURL(type);
$.getJSON(URL, function(data){
$.each(data, function(key,val){
if (string.toLowerCase() === val.toLowerCase())
{
flag = true;
}
});
});
alert(flag);
alert(flag);
if (flag)
{
alert(flag + " :Duplicate");
} else {
alert(flag + " :Unique");
}
}
});
由于某种原因,我无法理解,标志值的第一次测试总是在getJSON函数之后返回'false'。所以在上面的代码中,第一个'alert(flag);' call始终将标志值返回为false,第二个返回true或false,具体取决于在其上方的条件测试中实际分配给flag变量的内容。
如果我删除了警告行,则标志值false总是被赋予脚本底部的条件测试,因此函数始终返回该值是唯一的。
当警报行出现时,只有第一个警报调用将标志值返回为false,然后后续警报调用和以下条件使用我在条件上面的赋值中预期的值(true或false) 。
似乎在getJSON函数之后,对flag变量的第一次测试总是返回它被设置为false,然后所有其他测试返回true或false,具体取决于实际分配给flag变量的内容功能。我无法理解为什么,显然有一个合乎逻辑的解释是在逃避我。
我们将非常感谢您对此行为的任何帮助或解释。非常感谢提前。