我正在构建一个非常简单的表单验证,它仅验证必填字段。这是实验性的,我知道有很多表单验证插件。
我正在做的是调用一个函数,以这种格式传递表单id和javascript对象
{
control_id1 : {required : 'message to display if control is empty'},
control_id2 : {required : 'message to display if control is empty'},
...
}
该函数的作用是使用for(var k in obj){...}循环遍历js对象并检查具有给定id的控件是否具有空值,如果是,则将span标记附加到控件的具有给定消息的直接父母。
它还将“模糊”事件绑定到该控件,以便在失去焦点时,验证可以再次应用于控件。
您可以在此处查看此操作:http://jsfiddle.net/yvjZF/
正如您所看到的,当您单击按钮时,它显示消息正常。但如果控件失去焦点,则会显示错误信息。
我找不到它的原因,也许我在事件模型中有误解。对此的任何帮助将不胜感激。
谢谢,
安键
答案 0 :(得分:1)
不太清楚为什么,但是当我对以下代码进行更改时它开始工作:
for(var cid in validation_data)
{
$('#' + cid).blur
(
function()
{
// validate_control($(this),validation_data[cid]);
validate_control($(this),validation_data[$(this).attr('name')]);
}
);
}
在使用ActionScript进行编码时,我常常遇到这个问题,并且它与循环迭代器有关,这会影响循环的先前迭代。我唯一的解释是,cid
变量可能是通过引用传递而不是按值传递的。