简单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
,而不是直接更改样式。然后在样式表中放置一个名为maybeselected
的样式,该样式覆盖背景图像。这样可以将样式信息和行为分开。有两件事,事件应全部小写(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
,而不是直接更改样式。然后在样式表中放置一个名为maybeselected
的样式,该样式覆盖背景图像。通过这种方式,您可以将样式信息和行为分开。什么具体不起作用,您是否收到错误?您确定这是指向.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的返回值