方法传参不同但运行的结果一样

yaotomo 2018-08-14 03:12:41
动态拼接得到的html,得到用户列表,如下

<ul data-am-widget="gallery" class="am-gallery am-avg-sm-21 am-avg-md-31 am-avg-lg-41 am-gallery-default" data-am-gallery="{ pureview: true }">
<li>
<div class="am-gallery-item"><div><a href="/User/Gallery.aspx?Username=bruce" target="_blank"><img class="am-img-thumbnail am-radius" src="/data/user/bruce.JPG" style="width:100px;height:100px;"></a></div><div><span class="am-gallery-title">精思入神 <a href='javascript:deleteUser("137698","bruce")' class="am-icon-remove am-icon-fw" style="color:#333"></a></span></div></div>
</li>
<li><div class="am-gallery-item"><div><a href="/User/Gallery.aspx?Username=shankara" target="_blank"><img class="am-img-thumbnail am-radius" src="/data/user/shankara.JPG" style="width:100px;height:100px;"></a></div><div><span class="am-gallery-title">shankara <a href='javascript:deleteUser("137698","shankara")' class="am-icon-remove am-icon-fw" style="color:#333"></a></span></div></div>
</li>

<li>
<div class="am-gallery-item"><div><a href="/User/Gallery.aspx?Username=sterculiaceae" target="_blank"><img class="am-img-thumbnail am-radius" src="/data/user/sterculiaceae.JPG" style="width:100px;height:100px;"></a></div><div><span class="am-gallery-title">梧桐 <a href='javascript:deleteUser("137698","sterculiaceae")' class="am-icon-remove am-icon-fw" style="color:#333"></a></span></div></div>
</li>
</ul>


生成上面的DOM结构后,我点击图标运行deleteUser方法,每个用户节点传入的nodeid和userid是不同的。
但是不管点哪个用户,得到的nodeid和userid是一样的
都是我第一次点的那个用户的值

deleteUser方法

//确认是否删除当前节点的管理用户
function deleteUser(nodeid,userid) {
$('#deleteuser-confirm').modal({
relatedTarget: this,
onConfirm: function (options) {
console.log(nodeid, userid);
}
});
}
...全文
332 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
75闪光雷 2018-08-16
  • 打赏
  • 举报
回复
引用 19 楼 yaotomo 的回复:
[quote=引用 18 楼 qq_34309305 的回复:] 那么建议你这么写试试

var nid,uid;
function deleteUser(nodeid,userid) {
    nid=nodeid;
    uid=userid;
    $('#deleteuser-confirm').modal({
        relatedTarget: this,
        nid:nodeid,
        uid:userid,
        onConfirm: function (options) {
            console.log(nid, uid);
        }
    });
}
谢谢老师。虽然设置一个全局变量是可以的,但能不能不通过全局变量实现呢? 我觉得全局变量应该少用。[/quote] 两种解决方法 1.如果你怕变量污染,全局变量用命名空间包上

var mySpace={};//命名空间
function deleteUser(nodeid,userid) {
    mySpace.nid=nodeid;
    mySpace.uid=userid;
    $('#deleteuser-confirm').modal({
        relatedTarget: this,
        nid:nodeid,
        uid:userid,
        onConfirm: function (options) {
            console.log(mySpace..nid, mySpace..uid);
        }
    });
}
第二个方法 我认为你onConfirm: function (options) {             console.log(nid, uid);         } 这里调用时,上面的nodeid,userid有可能没传进去

$('#deleteuser-confirm').modal({
        relatedTarget: this,
        options.nid:nodeid,
        options.uid:userid,
        onConfirm: function (options) {
            console.log(options.nid,options.uid);
        }
    });
有可能是这样,具体原因还得你本地调试哈
yaotomo 2018-08-16
  • 打赏
  • 举报
回复
引用 18 楼 qq_34309305 的回复:
那么建议你这么写试试

var nid,uid;
function deleteUser(nodeid,userid) {
nid=nodeid;
uid=userid;
$('#deleteuser-confirm').modal({
relatedTarget: this,
nid:nodeid,
uid:userid,
onConfirm: function (options) {
console.log(nid, uid);
}
});
}


谢谢老师。虽然设置一个全局变量是可以的,但能不能不通过全局变量实现呢?
我觉得全局变量应该少用。
75闪光雷 2018-08-16
  • 打赏
  • 举报
回复
那么建议你这么写试试

var nid,uid;
function deleteUser(nodeid,userid) {
    nid=nodeid;
    uid=userid;
    $('#deleteuser-confirm').modal({
        relatedTarget: this,
        nid:nodeid,
        uid:userid,
        onConfirm: function (options) {
            console.log(nid, uid);
        }
    });
}
yaotomo 2018-08-16
  • 打赏
  • 举报
回复
引用 16 楼 qq_34309305 的回复:
我觉得你代码里的this可能有问题
是不是每次调用 虽然入参不一样
但如果this都是同一个对象
会导致你的问题,
建议输出this对象 看看



function deleteUser(nodeid, userid) {
console.log('outter userid ='+userid);
$('#deleteuser-confirm').modal({
// relatedTarget: this,
onConfirm: function (options) {
console.log('inner userid='+userid);
}
});
}

这么写,外层的userid每次都不一样,但是模态框每次都是一样的
下面是我点击了三个不同的用户,运行结果如下
我已经去掉了this。好像每次的this都一样
75闪光雷 2018-08-15
  • 打赏
  • 举报
回复
我觉得你代码里的this可能有问题 是不是每次调用 虽然入参不一样 但如果this都是同一个对象 会导致你的问题, 建议输出this对象 看看
讨厌走开啦 2018-08-15
  • 打赏
  • 举报
回复
引用 14 楼 yaotomo 的回复:
[quote=引用 13 楼 lqlqlq007 的回复:]
[quote=引用 11 楼 yaotomo 的回复:]
[quote=引用 8 楼 lqlqlq007 的回复:]
[quote=引用 5 楼 yaotomo 的回复:]
[quote=引用 2 楼 lqlqlq007 的回复:]
调用deleteUser方法的代码贴出来看看。

在1楼的html代码里
通过js动态生成的[/quote]

看到了,在deleteUser里把userid和nodeid打印出来看看吧,如果传入的参数是正确的,检查下是不是在模态框弹出后有其他代码会修改userid和nodeid,如果传入参数就不正确,检查下是不是有其他代码修改了href里的调用。[/quote]

我用console.log()得到的结果每次都是一样的。都是我第一次点击的那个用户的值。
但是elements下生成的DOM,传的参数是不一样的
中间没有修改过,只是调用传参,打开确认框。[/quote]

在浏览器里捕捉元素截图上来看看,不可能发生调用时传参和函数实际拿到的参数不符的情况。[/quote]

一楼的代码就是F12,element拿到的[/quote]

好吧,根据你当前给出的代码片段是看不出问题出在哪儿了,只能靠猜了,是不是外层的dom被其他的js代码加上了deleteUser的调用,也就是说你看上去点了第二个href,但实际上还是在调用外层dom上绑定的deleteUser?
yaotomo 2018-08-15
  • 打赏
  • 举报
回复
引用 13 楼 lqlqlq007 的回复:
[quote=引用 11 楼 yaotomo 的回复:]
[quote=引用 8 楼 lqlqlq007 的回复:]
[quote=引用 5 楼 yaotomo 的回复:]
[quote=引用 2 楼 lqlqlq007 的回复:]
调用deleteUser方法的代码贴出来看看。

在1楼的html代码里
通过js动态生成的[/quote]

看到了,在deleteUser里把userid和nodeid打印出来看看吧,如果传入的参数是正确的,检查下是不是在模态框弹出后有其他代码会修改userid和nodeid,如果传入参数就不正确,检查下是不是有其他代码修改了href里的调用。[/quote]

我用console.log()得到的结果每次都是一样的。都是我第一次点击的那个用户的值。
但是elements下生成的DOM,传的参数是不一样的
中间没有修改过,只是调用传参,打开确认框。[/quote]

在浏览器里捕捉元素截图上来看看,不可能发生调用时传参和函数实际拿到的参数不符的情况。[/quote]

一楼的代码就是F12,element拿到的
讨厌走开啦 2018-08-15
  • 打赏
  • 举报
回复
引用 11 楼 yaotomo 的回复:
[quote=引用 8 楼 lqlqlq007 的回复:]
[quote=引用 5 楼 yaotomo 的回复:]
[quote=引用 2 楼 lqlqlq007 的回复:]
调用deleteUser方法的代码贴出来看看。

在1楼的html代码里
通过js动态生成的[/quote]

看到了,在deleteUser里把userid和nodeid打印出来看看吧,如果传入的参数是正确的,检查下是不是在模态框弹出后有其他代码会修改userid和nodeid,如果传入参数就不正确,检查下是不是有其他代码修改了href里的调用。[/quote]

我用console.log()得到的结果每次都是一样的。都是我第一次点击的那个用户的值。
但是elements下生成的DOM,传的参数是不一样的
中间没有修改过,只是调用传参,打开确认框。[/quote]

在浏览器里捕捉元素截图上来看看,不可能发生调用时传参和函数实际拿到的参数不符的情况。
yaotomo 2018-08-15
  • 打赏
  • 举报
回复
引用 9 楼 qq_39706019 的回复:
http://www.jiyuew.top/article/26105


这不是JAVA的面向切面编程吗
请问和我的问题有什么关系
yaotomo 2018-08-15
  • 打赏
  • 举报
回复
引用 8 楼 lqlqlq007 的回复:
[quote=引用 5 楼 yaotomo 的回复:]
[quote=引用 2 楼 lqlqlq007 的回复:]
调用deleteUser方法的代码贴出来看看。

在1楼的html代码里
通过js动态生成的[/quote]

看到了,在deleteUser里把userid和nodeid打印出来看看吧,如果传入的参数是正确的,检查下是不是在模态框弹出后有其他代码会修改userid和nodeid,如果传入参数就不正确,检查下是不是有其他代码修改了href里的调用。[/quote]

我用console.log()得到的结果每次都是一样的。都是我第一次点击的那个用户的值。
但是elements下生成的DOM,传的参数是不一样的
中间没有修改过,只是调用传参,打开确认框。
yaotomo 2018-08-15
  • 打赏
  • 举报
回复
引用 4 楼 Logerlink 的回复:

点击事件无法触发,你的a里面没有值,点不到。。。


可以触发,每次点击调用deleteUser方法,虽然生成的html代码中的参数是不同的,但是点击得到的结果是一样的
讨厌走开啦 2018-08-14
  • 打赏
  • 举报
回复
引用 5 楼 yaotomo 的回复:
[quote=引用 2 楼 lqlqlq007 的回复:]
调用deleteUser方法的代码贴出来看看。

在1楼的html代码里
通过js动态生成的[/quote]

看到了,在deleteUser里把userid和nodeid打印出来看看吧,如果传入的参数是正确的,检查下是不是在模态框弹出后有其他代码会修改userid和nodeid,如果传入参数就不正确,检查下是不是有其他代码修改了href里的调用。
yaotomo 2018-08-14
  • 打赏
  • 举报
回复
引用 3 楼 zc_1994 的回复:
添加点击事件前先解除绑定点击事件


解除绑定不是为了防止多次绑定吗
yaotomo 2018-08-14
  • 打赏
  • 举报
回复
引用 1 楼 foren_whb 的回复:

function deleteUser(nodeid,userid) {
$('#deleteuser-confirm').modal({
relatedTarget: this,
nid:nodeid,
uid:userid,
onConfirm: function (options) {
console.log(this.nid, this.uid);
}
});
}


不行
yaotomo 2018-08-14
  • 打赏
  • 举报
回复
引用 2 楼 lqlqlq007 的回复:
调用deleteUser方法的代码贴出来看看。

在1楼的html代码里
通过js动态生成的
Logerlink 2018-08-14
  • 打赏
  • 举报
回复

点击事件无法触发,你的a里面没有值,点不到。。。
zc_1994 2018-08-14
  • 打赏
  • 举报
回复
添加点击事件前先解除绑定点击事件
讨厌走开啦 2018-08-14
  • 打赏
  • 举报
回复
调用deleteUser方法的代码贴出来看看。
丰云 2018-08-14
  • 打赏
  • 举报
回复

function deleteUser(nodeid,userid) {
$('#deleteuser-confirm').modal({
relatedTarget: this,
nid:nodeid,
uid:userid,
onConfirm: function (options) {
console.log(this.nid, this.uid);
}
});
}

87,942

社区成员

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

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