document.createElement("SELECT")创建出来的如何添加onChange事件

fatso1984 2011-02-19 02:51:04
RT,还要可以穿参数。
我这样做的
var s = document.createElement("SELECT") ;
s.onchange = "chufa()"
但是貌似不行啊
...全文
1605 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
an9ryfr09 2011-02-23
  • 打赏
  • 举报
回复 1
给回调函数传参?这样就行了
<script type="text/javascript">

window.onload = function(){

/*
*desc 根据不同浏览器给元素添加事件
*parma object obj(要添加事件的对象)
*parma string eventname(要添加的事件名)
*parma string callback(回调函数名)
*return void
*/
var addEvent = function( obj, eventname, callback ){

//其他浏览器
if(window.addEventListener){
obj.addEventListener( eventname, callback, false );
}
//ie
else{
obj.attachEvent( 'on'+eventname, callback );
}

return;

}




/*
*desc alert当前触发元素的value和text
*return void
*/
var mychange = function( var1,var2 ){
//alert('当前选中项的值为:'+this.value+' 当前选中项的文字描述为:'+this.options[this.selectedIndex].text);
alert(var1+var2);
}




/* 创建select元素并赋予其相应属性 */
var select = document.createElement("select");
select.id = "myselect";
select.name = "myselect";


/* 创建或浅克隆10个option元素并赋予其属性 */
for(i=1;i<=10;i++){
if(i==1)
var option = document.createElement("option");
else
option = option.cloneNode(false);

option.value = i;
option.innerHTML = "选项"+i;
//将次元素追加到select元素的子元素
select.appendChild(option);
}

//给select标签添加事件
addEvent( select, 'change', function(){mychange('添加change事件,','并且能传参')} );

document.getElementsByTagName("body")[0].appendChild(select);
}
</script>
kaifadi 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 shadowsniper 的回复:]

改了一下,在change的时候可以得到当前选中的value和innerHTML
JScript code
<script type="text/javascript">

//当文档加载完毕时
window.onload = function(){

/*
*desc 根据不同浏览器给元素添加事件
*parma object obj(要添加事件的对象)
*pa……
[/Quote]
这个方法好象也无法做到加自己的参数的办法,最后显示的无非只是其本身的value和text。如果这2个变成变量以后,方法也就失效了。
an9ryfr09 2011-02-22
  • 打赏
  • 举报
回复
改了一下,在change的时候可以得到当前选中的value和innerHTML
<script type="text/javascript">

//当文档加载完毕时
window.onload = function(){

/*
*desc 根据不同浏览器给元素添加事件
*parma object obj(要添加事件的对象)
*parma string eventname(要添加的事件名)
*parma string callback(回调函数名)
*return void
*/
var addEvent = function( obj, eventname, callback ){

//其他浏览器
if(window.addEventListener){
obj.addEventListener( eventname, callback, false );
}
//ie
else{
obj.attachEvent( 'on'+eventname, callback );
}

return;

}




/*
*desc alert当前触发元素的id
*return void
*/
function callback(){
alert('当前选中项的值为:'+this.value+' 当前选中项的文字描述为:'+this.options[this.selectedIndex].text);
}




/* 创建select元素并赋予其相应属性 */
var select = document.createElement("select");
select.id = "myselect";
select.name = "myselect";

/* 创建option元素并赋予其属性 */
var option = document.createElement("option");
option.value = "1";
option.innerHTML = "选项1";
//将次元素追加到select元素的子元素
select.appendChild(option);

/* 浅克隆一个option元素并赋予其属性 */
option = option.cloneNode(false);
option.value = "2";
option.innerHTML = "选项2";
//将次元素追加到select元素的子元素
select.appendChild(option);

//给select标签添加事件
addEvent( select, 'change', callback );

//将select元素追加到body的子元素
document.body.appendChild(select);

}

</script>

an9ryfr09 2011-02-22
  • 打赏
  • 举报
回复
<script type="text/javascript">

//当文档加载完毕时
window.onload = function(){

/*
*desc 根据不同浏览器给元素添加事件
*parma object obj(要添加事件的对象)
*parma string eventname(要添加的事件名)
*parma string callback(回调函数名)
*return void
*/
var addEvent = function( obj, eventname, callback ){

//其他浏览器
if(window.addEventListener){
obj.addEventListener( eventname, callback, false );
}
//ie
else{
obj.attachEvent( 'on'+eventname, callback );
}

return;

}




/*
*desc alert当前触发元素的id
*return void
*/
function callback(){
alert(this.id);
}



/* 创建select元素并赋予其相应属性 */
var select = document.createElement("select");
select.id = "myselect";
select.name = "myselect";

/* 创建option元素并赋予其属性 */
var option = document.createElement("option");
option.value = "1";
option.innerHTML = "选项1";
//将次元素追加到select元素的子元素
select.appendChild(option);

/* 创建option元素并赋予其属性 */
option = document.createElement("option");
option.value = "2";
option.innerHTML = "选项2";
//将次元素追加到select元素的子元素
select.appendChild(option);

//给select标签添加事件
addEvent( select, 'change', callback );

//将select元素追加到body的子元素
document.body.appendChild(select);

}


</script>
an9ryfr09 2011-02-22
  • 打赏
  • 举报
回复
firefox中的事件名不带on
  • 打赏
  • 举报
回复
s.onchange 一旦定下是什么就是什么,除非之后再次改写s.onchange。
所以想通过它来传递一个变化的参数是不可能的。必须通过其它方式(我上面说了)。
  • 打赏
  • 举报
回复
还要可以穿参数。
我这样做的
var s = document.createElement("SELECT") ;
s.onchange = "chufa()"
=======
如果参数固定的,你可以直接写在chufa函数体里。
如果参数变动的,你可以通过一个全局变量存放,在chufa函数体取它使用。
在s.onchange = "chufa()" 这句上作文章是不行的,就算写上参数,那个参数也是固定的,就算每次都传了,传的也都是最初设置时的那个值。
kaifadi 2011-02-21
  • 打赏
  • 举报
回复
改成带参数的,只有第一次加载的时候有效果:

<script type="text/javascript">
function chufa(a){alert(a);}
onload=function(){
var s = document.createElement("SELECT");
var opt = new Option("xx","xx");
s.options.add(opt);
opt = new Option("ccc","ccc");
s.options.add(opt);
s.onchange = chufa("abc");
document.body.appendChild(s);
}
</script>

改成这样的用法:s.onpropertychange = chufa;只有IE有效,火狐没有反映!
fatso1984 2011-02-21
  • 打赏
  • 举报
回复
我这个chufa函数要有参数。
itinfm 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fatso1984 的回复:]
我这个chufa函数要有参数。
[/Quote]

js函数不需要显示定义参数,可以用argument[0],arugment[1]....来获取参数!
  • 打赏
  • 举报
回复
1楼正解,就是onchange的赋予写法有问题。
zell419 2011-02-19
  • 打赏
  • 举报
回复
是不是还没放option?
  • 打赏
  • 举报
回复
错了,
var s = document.createElement("SELECT") ;
s.onpropertychange = chufa;
这样试试
  • 打赏
  • 举报
回复
var s = document.createElement("SELECT") ;
s.onpropertychange = "chufa()"
这样试试
hookee 2011-02-19
  • 打赏
  • 举报
回复
[code=HTM]
<script type="text/javascript">
function chufa(){alert('ok');}
onload=function(){
var s = document.createElement("SELECT");
var opt = new Option("xx","xx");
s.options.add(opt);
opt = new Option("ccc","ccc");
s.options.add(opt);
s.onchange = chufa;
document.body.appendChild(s);
}
</script>

[/code]

87,909

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧