jQuery .on绑定事件时变量问题

諵辞 2018-07-26 04:36:20
大家好 我有个问题一直弄不明白 想请教一下各位!!!谢谢。

有一段代码 是这样的。
var moreId = 0;
moreId是动态生成的, 第一次是1 第二次是2 每次+1;
每次调用a_upload()会从外部传入一个参数作为moreId传入到参数内部进行赋值或运算;

问题来了:
在jQuery on绑定事件的时候 输出的moreId 总是0;
在下面//111111111注释下的console.log() 输出的是正常的 0 1 2 3;
但是在//222222222注释下的输出 就总是0; 就是绑定事件后 总是为0; 用自调函数封闭变量都不行;
请教各位 这个该怎么办, 怎样让//2222222222下的console.log() 输出正常。

再次谢谢各位!

function a_upload(selector, moreId) {

var lastEleCls = $('.a[moreId=' + moreId + ']');
var lastEleClsName = '.a[moreId=' + moreId + ']';

//11111111111111111111
console.log(moreId);

(function (selector, moreId) {

//绑定Change事件
$(lastEleCls).find(selector).on('change', function () {
//22222222222222222
console.log(moreId);
});

})(selector,moreId);
}

a_upload(selector , 1); //111注释下con输出为1 //222注释输出为0
a_upload(selector , 2); //111注释下con输出为2 //222注释输出为0
...全文
268 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
諵辞 2018-07-27
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
不应该啊,看代码没有问题, 不用自调函数封闭也应该没问题,
你民下完整代码看看,可能是别的原因引起的


我看了好多遍 卡了我半天了。就很奇怪 这个问题。别处好像也没关联!
諵辞 2018-07-27
  • 打赏
  • 举报
回复
引用 2 楼 foren_whb 的回复:
(function (selector, moreId) {
//绑定Change事件
$(lastEleCls).find(selector).on('change', function () {
console.log(moreId);
});

})(selector, moreId);

这个封包有意义吗?
如果没有就去掉


其实没啥意义,但就是变量封不住的样子。总为0 很奇怪
丰云 2018-07-27
  • 打赏
  • 举报
回复
(function (selector, moreId) {
//绑定Change事件
$(lastEleCls).find(selector).on('change', function () {
console.log(moreId);
});

})(selector, moreId);

这个封包有意义吗?
如果没有就去掉
諵辞 2018-07-27
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
[quote=引用 4 楼 ssh0221 的回复:]
[quote=引用 1 楼 jslang 的回复:]
不应该啊,看代码没有问题, 不用自调函数封闭也应该没问题,
你民下完整代码看看,可能是别的原因引起的


我看了好多遍 卡了我半天了。就很奇怪 这个问题。别处好像也没关联![/quote]
给你个正确的例子,看看和你的代码有什么不一样。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title> 页面名称 </title>
</head>
<body>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" id="id1" />
<input type="checkbox" id="id2" />
<input type="checkbox" id="id3" />
<script type="text/javascript">
function a_upload(selector, moreId) {
console.log(moreId);
$(selector).on('change', function () {
console.log(moreId);
});
}
a_upload("#id1" , 1);
a_upload("#id2" , 2);
a_upload("#id3" , 3);

</script>
</body>
</html>
[/quote]

非常感谢 老哥!!! 解决了。 我发现 除了var moreId = 0; 在某个不知名的代码中间,还夹杂着一句 moreId = 0; 我还纳闷 我单独写个例子都没问题 放到这里就不行了, 原来是有个内鬼
天际的海浪 2018-07-27
  • 打赏
  • 举报
回复
引用 4 楼 ssh0221 的回复:
[quote=引用 1 楼 jslang 的回复:]
不应该啊,看代码没有问题, 不用自调函数封闭也应该没问题,
你民下完整代码看看,可能是别的原因引起的


我看了好多遍 卡了我半天了。就很奇怪 这个问题。别处好像也没关联![/quote]
给你个正确的例子,看看和你的代码有什么不一样。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title> 页面名称 </title>
</head>
<body>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" id="id1" />
<input type="checkbox" id="id2" />
<input type="checkbox" id="id3" />
<script type="text/javascript">
function a_upload(selector, moreId) {
console.log(moreId);
$(selector).on('change', function () {
console.log(moreId);
});
}
a_upload("#id1" , 1);
a_upload("#id2" , 2);
a_upload("#id3" , 3);

</script>
</body>
</html>
天际的海浪 2018-07-26
  • 打赏
  • 举报
回复
不应该啊,看代码没有问题, 不用自调函数封闭也应该没问题,
你民下完整代码看看,可能是别的原因引起的

87,954

社区成员

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

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