我正在编写一个脚本,该脚本使用Prototype和LightView删除表单元素中的默认值。这些脚本在Safari中运行良好,但在FireFox(3.5.5)中完全没有。
触发光照时会触发。
document.observe('lightview:opened', function() {
if($('contact_form')) {
var defaults = new Array();
var ins = $('contact_form').getElements();
var inlen = ins.length;
for(i=0; i < inlen; i++) {
alert(i)
if($(ins[i]).readAttribute('type') != 'image') {
defaults[ins[i].name] = $(ins[i]).value;
$(ins[i]).observe('focus', checkDefault.bind(event, ins[i]));
}
}
function checkDefault(name, event) {
alert(name.name)
if($(name).value == defaults[name.name]) {
alert(defaults[name.name])
$(name).value = '';
}
}
}
});
奇怪的是,当我检查inlen的长度时,会提示正确的号码,但是当我提醒'i'时,只会提醒第一个号码。我无法弄清楚为什么会这样。
这里有什么想法吗?
以下是问题的地址: http://bearing.krd-design.net/
由于 富
答案 0 :(得分:2)
我不确定这是否会导致该问题,但您遗漏了var
:
for(var i=0; i < inlen; i++) {
此外,在alert()
s之后没有分号。
尝试纠正这些问题,看看它是否有所作为。
修改强>
正如Matt所指出的,在评论中:忽略var
在全局范围内创建变量。如果prototypejs也使用全局变量i
(但我真诚地怀疑),这可能会导致问题。
编辑2:
另一种可能性是通过输入名称访问数组:
defaults[ins[i].name] = $(ins[i]).value;
尝试将defaults
声明为对象:
var defaults = {};
答案 1 :(得分:1)
这听起来像是时间问题;警报会将执行速度降低到代码在FF中运行的程度。你使用FireBug吗?
答案 2 :(得分:0)
首先,我认为只有i = 0可能是因为JS在第一次迭代中破坏了。要进行故障排除,我会在行之间放置alert()并查看哪条线正在破坏它。
我对这个问题的猜测应该在一行:
$(ins[i]).observe('focus', checkDefault.bind(event, ins[i]));
'bind'函数的第一个参数应该是context,你传入'event'。 'event'没有定义,它应该是上下文或范围。
在您的情况下,我认为您可以使用:
$(ins[i]).observe('focus', checkDefault(ins[i]));