我写成setAttribute('onclick',“testvalue()”)没有任务反应
写成setAttribute('onclick',testvalue())会直接执行testvalue()函数,但是并不会给对象添加onclick事件
最后我写成setAttribute('onclick',function (){testvalue()})这样终于正确的添加onclick事件了,但是却遇到了一个传值的问题,我的代码如下:
items2 = oDoc.selectNodes("//CLASSNAME/Table/pcl2_id");
var itemsLength=items1.length;
for(i=0;i<itemsLength;i++)
{
var newOption = document.createElement("li");
newOption.setAttribute('onclick',function (){load2(items2[i].text);})
}
这句function (){load2(items2[i].text);}中的items2[i].text不能被赋值进去,不知各位大大是否有办法解决下,用其他方式也行,只要能给对象动态设置onclick事件就行,因为对象都是用createElement生成的,用getElementById的方式不现实,跪求解答,搞了一天了,郁闷死了!!!!
11 个解决方案
#1
newOption.setAttribute('onclick',function (){load2(items2[i].text);})
改成
newOption.setAttribute('onclick',function (v){return function(){load2(v);}}(items2[i].text))
改成
newOption.setAttribute('onclick',function (v){return function(){load2(v);}}(items2[i].text))
#2
楼上的可以,也可以直接把值写到function(xxx)这样只有函数执行,就会把值传过去
#3
for(i=0;i<itemsLength;i++)
{
(function(index){
var newOption = document.createElement("li");
newOption.setAttribute('onclick',function (){load2(items2[index].text);})
//或者
newOption.onclick=function (){load2(items2[index].text);
})(i);
}
其实我没看明白你的问题。。。
{
(function(index){
var newOption = document.createElement("li");
newOption.setAttribute('onclick',function (){load2(items2[index].text);})
//或者
newOption.onclick=function (){load2(items2[index].text);
})(i);
}
其实我没看明白你的问题。。。
#4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
var array=[1,2,3,4,5,6];
function testvalue(val)
{
alert(val);
}
function add(){
for(i=0,len=array.length;i<len;i++)
{
var newOption = document.createElement("li");
newOption.innerHTML=i+1;
newOption.onclick=function (val){ return function(){testvalue(val);}}(array[i])
document.getElementById('div').appendChild(newOption);
}
}
</script>
</HEAD>
<BODY>
<input type='button' value='click me' onclick='add()' />
<div id='div'></div>
</BODY>
</HTML>
#5
newOption.setAttribute('onclick'
可以直接写
newOption.onclick
可以直接写
newOption.onclick
#6
setAttribute('onclick',testvalue())
=》
setAttribute('onclick',testvalue) 应设置函数句柄
=》
setAttribute('onclick',testvalue) 应设置函数句柄
#7
是你邦定事件的方法不对
function addEventListener(control, eventName, fn) {
if (window.attachEvent) {
control.attachEvent('on' + eventName, fn);
} else if (window.addEventListener) {
control.addEventListener(eventName, fn, false);
} else {
control['on' + eventName] = fn;
}
}
邦定的时候用addEventListener(newOption, 'click', function (){load2(items2[i].text);});
function addEventListener(control, eventName, fn) {
if (window.attachEvent) {
control.attachEvent('on' + eventName, fn);
} else if (window.addEventListener) {
control.addEventListener(eventName, fn, false);
} else {
control['on' + eventName] = fn;
}
}
邦定的时候用addEventListener(newOption, 'click', function (){load2(items2[i].text);});
#8
闭包了
#9
很强悍,分有所值了,用1楼和4楼的方法搞定了!
#10
应该不是items2[index].text没有被赋值进去,而是items2 = oDoc.selectNodes("//CLASSNAME/Table/pcl2_id");
没有正确取得items2
看看我的测试代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function load() {
var test = document.getElementById("test");
var testNum = 1;
test.setAttribute("onclick", function() {alert(testNum);});
}
</script>
</HEAD>
<BODY onload="load();">
<div id="test">123</div>
</BODY>
</HTML>
没有正确取得items2
看看我的测试代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function load() {
var test = document.getElementById("test");
var testNum = 1;
test.setAttribute("onclick", function() {alert(testNum);});
}
</script>
</HEAD>
<BODY onload="load();">
<div id="test">123</div>
</BODY>
</HTML>
#11
4楼的还是没看懂
看来还是要多练习看书呀
看来还是要多练习看书呀
#1
newOption.setAttribute('onclick',function (){load2(items2[i].text);})
改成
newOption.setAttribute('onclick',function (v){return function(){load2(v);}}(items2[i].text))
改成
newOption.setAttribute('onclick',function (v){return function(){load2(v);}}(items2[i].text))
#2
楼上的可以,也可以直接把值写到function(xxx)这样只有函数执行,就会把值传过去
#3
for(i=0;i<itemsLength;i++)
{
(function(index){
var newOption = document.createElement("li");
newOption.setAttribute('onclick',function (){load2(items2[index].text);})
//或者
newOption.onclick=function (){load2(items2[index].text);
})(i);
}
其实我没看明白你的问题。。。
{
(function(index){
var newOption = document.createElement("li");
newOption.setAttribute('onclick',function (){load2(items2[index].text);})
//或者
newOption.onclick=function (){load2(items2[index].text);
})(i);
}
其实我没看明白你的问题。。。
#4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
var array=[1,2,3,4,5,6];
function testvalue(val)
{
alert(val);
}
function add(){
for(i=0,len=array.length;i<len;i++)
{
var newOption = document.createElement("li");
newOption.innerHTML=i+1;
newOption.onclick=function (val){ return function(){testvalue(val);}}(array[i])
document.getElementById('div').appendChild(newOption);
}
}
</script>
</HEAD>
<BODY>
<input type='button' value='click me' onclick='add()' />
<div id='div'></div>
</BODY>
</HTML>
#5
newOption.setAttribute('onclick'
可以直接写
newOption.onclick
可以直接写
newOption.onclick
#6
setAttribute('onclick',testvalue())
=》
setAttribute('onclick',testvalue) 应设置函数句柄
=》
setAttribute('onclick',testvalue) 应设置函数句柄
#7
是你邦定事件的方法不对
function addEventListener(control, eventName, fn) {
if (window.attachEvent) {
control.attachEvent('on' + eventName, fn);
} else if (window.addEventListener) {
control.addEventListener(eventName, fn, false);
} else {
control['on' + eventName] = fn;
}
}
邦定的时候用addEventListener(newOption, 'click', function (){load2(items2[i].text);});
function addEventListener(control, eventName, fn) {
if (window.attachEvent) {
control.attachEvent('on' + eventName, fn);
} else if (window.addEventListener) {
control.addEventListener(eventName, fn, false);
} else {
control['on' + eventName] = fn;
}
}
邦定的时候用addEventListener(newOption, 'click', function (){load2(items2[i].text);});
#8
闭包了
#9
很强悍,分有所值了,用1楼和4楼的方法搞定了!
#10
应该不是items2[index].text没有被赋值进去,而是items2 = oDoc.selectNodes("//CLASSNAME/Table/pcl2_id");
没有正确取得items2
看看我的测试代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function load() {
var test = document.getElementById("test");
var testNum = 1;
test.setAttribute("onclick", function() {alert(testNum);});
}
</script>
</HEAD>
<BODY onload="load();">
<div id="test">123</div>
</BODY>
</HTML>
没有正确取得items2
看看我的测试代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function load() {
var test = document.getElementById("test");
var testNum = 1;
test.setAttribute("onclick", function() {alert(testNum);});
}
</script>
</HEAD>
<BODY onload="load();">
<div id="test">123</div>
</BODY>
</HTML>
#11
4楼的还是没看懂
看来还是要多练习看书呀
看来还是要多练习看书呀