再问关于JS添加事件监听 本帖最后由 lnw 于 2011-08-16 17:42:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function onloadCheck() { var target = document.forms[0]; for(var i=0; i<target.elements.length; i++) { var e = target.elements[i]; if(e.type == "text" || e.type == "password" || e.type == "file" || e.type == "textarea") { onblurMethod[e.name] = e.getAttribute("onblur"); e.onblur=""; //如果check通过 增加onblur事件 if(check() == true){ e.attachEvent("onblur",onblurMethod[e.name]) }else{ //check 不过的处理 alert('check不通过'); } } } } 好吧需求是这样的,在不修改原画面的基础上,只在原画面的的body onload事件中添加方法,来实现对画面中所有text,textarea,password,file等控件的输入内容做check,check通过的情况下执行这些控件原来的onblur事件,否则做其他相应动作。onblur事件原来调用的方法不同控件可能也不尽相同。 1楼的朋友,你的方法只能控制在onload时是否添加e.attachEvent("onblur",onblurMethod[e.name])在onblur事件发生时,实际上是没有做check的。 试试e.attachEvent("onblur", function(fnHandler) { return function() { if(check() == true) { fnHandler.call(); } }}(onblurMethod[e.name])); 按楼上的方法修改以后 function onloadCheck() { var target = document.forms[0]; for(var i=0; i<target.elements.length; i++) { var e = target.elements[i]; if(e.type == "text" || e.type == "password" || e.type == "file" || e.type == "textarea") { //var onblurMethod = e.getAttribute("onblur"); onblurMethod[e.name] = e.getAttribute("onblur"); e.onblur=""; e.attachEvent("onblur", function(fnHandler) { return function() { if(check() == true) { fnHandler.call(); } } }(onblurMethod[e.name]) ); } }会报fnHandle为空的错 页面加载check通过再添加 onblur! 解决了,用了个很bt的方法,代码如下:<html><head></head><SCRIPT LANGUAGE='JavaScript'> //var onblurMethod = new Array(); function format() { alert("format"); } function count() { alert("count"); } function check() { alert("check"); return true; } </SCRIPT><SCRIPT LANGUAGE='JavaScript'> function onloadCheck() { var target = document.forms[0]; for(var i=0; i<target.elements.length; i++) { var e = target.elements[i]; if(e.type == "text" || e.type == "password" || e.type == "file" || e.type == "textarea") { var itemId = target.elements[i].id; if(itemId == null || itemId == "") { itemId = target.elements[i].name; } var onblurMethod = e.getAttribute("onblur").toString(); var start = onblurMethod.indexOf("{") + 1; var end = onblurMethod.indexOf("}"); var fnStr = onblurMethod.substring(start, end); fnStr = "document.getElementById('" + itemId + "').onblur= function(){if(check()) " + fnStr + "}"; eval(fnStr); } } }</SCRIPT><body onload="onloadCheck()"> <form name="test"> name:<input type="text" name="name" value="" onblur="format();" /><br> age :<input type="text" name="age" value="" onblur="count();"/><br> <input type="button" name="btnOk" value="OK"/> </form></body></html> clientHeight的问题 checkbox全选问题 把html段落用正则转换成数组的方法 用js实现下载的问题 求助!这段代码中THIS弄不清楚了 eval("var strTemp2 = document.theForm.elements['lgm" + k +"'].value");为什么不对呢 梅花雪树型菜单字体颜色问题 如何得到鼠标当前位置。在线等! 一个function a()用setTimeout调用自己,我多次执行a(),会不会......? ★★★ 求助,怎样xp效果的导航条 ★★★ ExtJS window窗体怎么能够做到只渲染一次 后台截取问题,紧急~!
var target = document.forms[0];
for(var i=0; i<target.elements.length; i++) {
var e = target.elements[i];
if(e.type == "text" || e.type == "password" || e.type == "file" || e.type == "textarea") {
onblurMethod[e.name] = e.getAttribute("onblur");
e.onblur="";
//如果check通过 增加onblur事件
if(check() == true){
e.attachEvent("onblur",onblurMethod[e.name])
}else{
//check 不过的处理
alert('check不通过');
}
}
}
}
e.attachEvent("onblur",onblurMethod[e.name])
在onblur事件发生时,实际上是没有做check的。
return function() {
if(check() == true) {
fnHandler.call();
}
}
}(onblurMethod[e.name])
);
var target = document.forms[0];
for(var i=0; i<target.elements.length; i++) {
var e = target.elements[i];
if(e.type == "text" || e.type == "password" || e.type == "file" || e.type == "textarea") {
//var onblurMethod = e.getAttribute("onblur");
onblurMethod[e.name] = e.getAttribute("onblur");
e.onblur="";
e.attachEvent("onblur", function(fnHandler) {
return function() {
if(check() == true) {
fnHandler.call();
}
}
}(onblurMethod[e.name])
);
}
}会报fnHandle为空的错
check通过再添加 onblur!
<head>
</head>
<SCRIPT LANGUAGE='JavaScript'> //var onblurMethod = new Array();
function format() {
alert("format");
}
function count() {
alert("count");
}
function check() {
alert("check");
return true;
}
</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>
function onloadCheck() {
var target = document.forms[0];
for(var i=0; i<target.elements.length; i++) {
var e = target.elements[i];
if(e.type == "text" || e.type == "password" || e.type == "file" || e.type == "textarea") {
var itemId = target.elements[i].id;
if(itemId == null || itemId == "") {
itemId = target.elements[i].name;
}
var onblurMethod = e.getAttribute("onblur").toString();
var start = onblurMethod.indexOf("{") + 1;
var end = onblurMethod.indexOf("}");
var fnStr = onblurMethod.substring(start, end);
fnStr = "document.getElementById('" + itemId + "').onblur= function(){if(check()) " + fnStr + "}"; eval(fnStr);
}
}
}
</SCRIPT>
<body onload="onloadCheck()">
<form name="test">
name:<input type="text" name="name" value="" onblur="format();" /><br>
age :<input type="text" name="age" value="" onblur="count();"/><br>
<input type="button" name="btnOk" value="OK"/>
</form>
</body>
</html>