请教JavaScript 事件的返回参数为什么是Click事件?

问题描述:click事件没有按预期返回字符串参数,而是将click事件作为参数回传,这是为什么?应如何解决,哪怕给个提示也好,谢谢了!/**方法描述:服务器接收到格式为:... 问题描述:click事件没有按预期返回字符串参数,而是将click事件作为参数回
传,这是为什么?应如何解决,哪怕给个提示也好,谢谢了!
/*
* 方法描述:服务器接收到格式为:st1r#str2#str3#str4的字符串。js将其分
* 割成数组。然后依次在一个div标签下建立数个span标签。span标
* 签附于一个click事件侦听。目的是把参数字符串写入一个text标
* 签。
* @parameters responseText :服务器回执字符串。
*/
function buildChoose(responseText){
//DIV标签
var content = _get("choosePanel");
//字符串数组
var columns = responseText.split("#");
//字符串数组第一位是text的id
var textObj = _get(columns[0]);
//click事件响应方法
var onclickFn = function(index){
return function(index){
alert("type:"+index.type);//此处输入为 type:click,本来应该是字符串啊?
//textObj.value = columns[parseInt(index)];
}
}
//循环创建span标签,然后绑定侦听
for(var i=1;i<columns.length;i++){
var column = document.createElement("span");
column.style.cssText="padding:2px;cursor:pointer;color:#4294EF;";
column.innerHTML = columns[i];
content.appendChild(column);
addEventDf(column,"click",oncclickFn(i));
}
}
//绑定侦听的方法。里面很干净什么也没有。
function addEventDf(obj,evt,fn){
if(obj.addEventListener){
obj.addEventListener(evt,fn,false);
}else if(obj.attachEvent){
obj.attachEvent('on'+evt,fn);
}
}
小弟百般无奈之下选择求助百度。没有多少分。明白的望不吝赐教,不明白的也请帮的顶一下,别沉了,这礼拜能不能按时回家就看它了。
首先 jlake :
alert("type:"+index.type);输出结果确实是 type:click;之前我也不信,后来回调函数总说参数是一个object。我就是用index.type看看是一个什么对象,结果是click。因为这组方法我用了很多次,从没有发现这个情况。之前从来都是我要的结果(参数是数值就是数值,字符串就是字符串)。这次确实想不明白。

再次 binjly:
你似乎说的有板有眼,好像就应该是这样,但我还是想仔细听听您的高见。可以详细一点说明吗?同时,您给的方法我之前也试过了,第一个参数得到click,之后的就是undefined。

/****/
非常感谢二位的帮助,问题已经找到了。主要是闭包变量的问题
var onclickFn = function(index){
return function(){//这里的index参数需要去掉,才可以获取正确的值。
alert("type:"+index.type);//此处输入为 type:click,本来应该是字符串啊?
}
}
虽然在这里我没有得到我想要的答案,但是为了表达我的感谢,我还是想兑现之前的承诺。谢谢!
展开
 我来答
百度网友a435633
2010-01-26 · TA获得超过1235个赞
知道大有可为答主
回答量:1018
采纳率:0%
帮助的人:0
展开全部
首先你得明白函数。
function addEventDf(obj,evt,fn){
if(obj.addEventListener){
obj.addEventListener(evt,fn,false);
}else if(obj.attachEvent){
obj.attachEvent('on'+evt,fn);
}
的意思。

这个函数的功能是给对象绑定事件。
obj 是对象。
evt 是事件名,浏览器之间有差异。比如鼠标单击,IE 的事件名是 onclick,firefox 是 click。
fn 是回调函数,也就是 evt 发生的时候调用的函数。关键就要看这个回调函数的参数怎么定义。这时候你得查 addEventListener 和 attachEvent 这两个方法的文档。

addEventListener 的定义(Mozilla)
target.addEventListener(type, listener, useCapture);

attachEvent 的定义(微软)
bSuccess = object.attachEvent(sEvent, fpNotify)

onclickFn 的定义
var onclickFn = function(index){
//这儿如没有特殊处理,没有必要返回 function。
//直接 alert("type:"+index.type); 就可以。
return function(index){
alert("type:"+index.type);
}
}

addEventDf(column,"click",oncclickFn(i));
回调函数的第一个参数 type 或 sEvent 你给赋值 i, 是个数值型的变量, 按理来说 i.type 不会有值, 你直接 alert("type:"+index); 看看是什么。

补充:
如果你会用 Firebug,把 alert 语句改成
console.log("type:", index);
看看结果就知道 index 到底是什么了。
binjly
2010-01-25 · TA获得超过3064个赞
知道大有可为答主
回答量:2017
采纳率:0%
帮助的人:2766万
展开全部
晕了,谁告诉你的是字符串?
第一个参数当然应该是响应事件,你要取得index,应该这样写
addEventDf(column,"click",oncclickFn(e,i));
e是响应事件,i才会是你传进去的index
同时,var onclickFn = function(index){
也要改成var onclickFn = function(e, index){
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式