简单JavaScript不工作

简单JavaScript不工作,javascript,Javascript,有人能告诉我我做错了什么吗 window.onload = initForm; function initForm() { var allTags = document.getElementsByTagName("*"); for(i=0; i<allTags.length; i++) { if (allTags[i].className.indexOf("textbox") > -1) { allTags[i].onFocus

有人能告诉我我做错了什么吗

window.onload = initForm;
function initForm() {
    var allTags = document.getElementsByTagName("*");
    for(i=0; i<allTags.length; i++) {
        if (allTags[i].className.indexOf("textbox") > -1) {
            allTags[i].onFocus = fieldSelect;
            allTags[i].onBlur = fieldDeSelect;          
        }
    }
}
function fieldSelect() {
    this.style.backgroundImage = "url('inputBackSelected.png')";
}

function fieldDeSelect() {
    this.style.backgroundImage = "url('inputBack.png')";
}
window.onload=initForm;
函数initForm(){
var allTags=document.getElementsByTagName(“*”);
对于(i=0;i-1){
allTags[i].onFocus=fieldSelect;
allTags[i].onBlur=fieldDeSelect;
}
}
}
函数fieldSelect(){
this.style.backgroundImage=“url('inputBackSelected.png')”;
}
函数字段取消选择(){
this.style.backgroundImage=“url('inputBack.png')”;
}
我是JavaScript的初学者,所以我还不习惯调试代码

谢谢


Luke

而不是window.onload=initform尝试window.onload=function(){/init function/}
此外,在引用函数时,即使没有参数,也应使用()。

而不是window.onload=initform try window.onload=function(){/init function/}
同样,在引用函数时,即使没有参数,也应该使用()。

问题是,当调用
字段选择
字段取消选择
时,
引用的是
窗口
对象,而不是触发事件的元素。您可能需要考虑使用jQuery:

$(document).ready(function() {
    $('.textbox').focus(fieldSelect).blur(fieldDeselect);
});

function fieldSelect() {
    $(this).css('background-image', 'url("inputBackSelected.png")');
}

function fieldDeselect() {
    $(this).css('background-image', 'url("inputBack.png")');
}

jQuery负责确保在调用事件处理程序时,
引用触发事件的元素。

问题是,当调用
字段选择
字段取消选择
时,
引用
窗口
对象,而不是触发事件的元素。您可能需要考虑使用jQuery:

$(document).ready(function() {
    $('.textbox').focus(fieldSelect).blur(fieldDeselect);
});

function fieldSelect() {
    $(this).css('background-image', 'url("inputBackSelected.png")');
}

function fieldDeselect() {
    $(this).css('background-image', 'url("inputBack.png")');
}

jQuery负责确保在调用事件处理程序时,
引用触发事件的元素。

您的问题在于附加事件处理程序。您应该绑定到
onfocus
onblur
(注意小写的事件名称)

作为建议,您可能希望查看一个非常简单的跨浏览器,其中添加了一行快速代码,以确保正确的
指针:

function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    // fix added by me to handle the `this` issue
    var r = obj.attachEvent("on"+evType, function(){ 
      retrun fn.apply(obj, arguments); 
    });
    return r;
  } else {
    alert("Handler could not be attached");
  }
} 
然后使用
addEvent
函数而不是
allTags[i]。onfocus=
在未来的绑定事件中,您可能会有更好的里程数

addEvent(allTags[i], 'focus', fieldSelect);
addEvent(allTags[i], 'blur', fieldDeSelect);

您的问题在于附加事件处理程序。您应该绑定到
onfocus
onblur
(注意小写的事件名称)

作为建议,您可能希望查看一个非常简单的跨浏览器,其中添加了一行快速代码,以确保正确的
指针:

function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    // fix added by me to handle the `this` issue
    var r = obj.attachEvent("on"+evType, function(){ 
      retrun fn.apply(obj, arguments); 
    });
    return r;
  } else {
    alert("Handler could not be attached");
  }
} 
然后使用
addEvent
函数而不是
allTags[i]。onfocus=
在未来的绑定事件中,您可能会有更好的里程数

addEvent(allTags[i], 'focus', fieldSelect);
addEvent(allTags[i], 'blur', fieldDeSelect);

两件事,事件应全部小写(
onfocus
onblur
)和
不指向IE中触发事件的对象。请尝试以下操作:

function fieldSelect(e) {
    var event;
    if(!e) {
        event = window.event;
    } else {
        event = e;
    }
    event.target.style.backgroundImage = "url('inputBackSelected.png')"; 
} 

function fieldDeSelect(e) {
    var event;
    if(!e) {
        event = window.event;
    } else {
        event = e;
    }
    event.target.style.backgroundImage = "url('inputBack.png')"; 
} 
标准complient浏览器将向事件处理程序传递事件对象。IE使用全局
窗口。事件
对象。无论哪种方式,都可以使用该对象获取触发处理程序的事件的目标


另一个可能更可取的选择是设置函数并删除
className
,而不是直接更改样式。然后在样式表中放置一个名为maybe
selected
的样式,该样式覆盖背景图像。这样可以将样式信息和行为分开。

有两件事,事件应全部小写(
onfocus
onblur
),并且
不指向IE中触发事件的对象。请尝试以下操作:

function fieldSelect(e) {
    var event;
    if(!e) {
        event = window.event;
    } else {
        event = e;
    }
    event.target.style.backgroundImage = "url('inputBackSelected.png')"; 
} 

function fieldDeSelect(e) {
    var event;
    if(!e) {
        event = window.event;
    } else {
        event = e;
    }
    event.target.style.backgroundImage = "url('inputBack.png')"; 
} 
标准complient浏览器将向事件处理程序传递事件对象。IE使用全局
窗口。事件
对象。无论哪种方式,都可以使用该对象获取触发处理程序的事件的目标


另一个可能更可取的选择是设置函数并删除
className
,而不是直接更改样式。然后在样式表中放置一个名为maybe
selected
的样式,该样式覆盖背景图像。通过这种方式,您可以将样式信息和行为分开。

什么具体不起作用,您是否收到错误?您确定这是指向
.png
图像的正确路径吗?它们不在
images/
目录或其他什么地方?您首先想做什么?这是一个HTML文件还是什么?使用类似fiddler或http analyzer的工具来监视404试图检索您的图像。javascript看起来不错。不过我会改变循环<代码>用于(i=0;如果您发现有帮助,我不会忘记选择一个答案。单击绿色复选标记。什么具体不起作用,您是否收到错误?您确定这是指向
.png
图像的正确路径吗?它们不在
图像/
目录或其他目录中?您首先要做的是什么?这是否带有HTML文件还是什么?使用fiddler或http analyzer之类的工具来监视404试图检索您的图像。javascript看起来不错。不过我会更改循环。
(i=0;如果您发现有帮助,我不会忘记选择答案。单击绿色复选标记。一点也不正确。
window.onload=initform
完全合法。如果要添加
()
它会立即调用该函数,并将
window.onload
分配给
initform
的返回值。一点也不正确。
window.onload=initform
完全合法。如果要添加
()
它将立即调用该函数并将
window.onload
分配给
initform
e=e | | window.event的返回值