首页 新闻 会员 周边 捐助

关于在$.ajax中使用$(this)的问题

0
悬赏园豆:20 [已解决问题] 解决于 2014-09-28 17:54

jquery 版本为 1.11.1。

写了一个举报功能,在文章页会产生类似下面的这样的多个标签,当参数不一样时意义也不一样。

比如举报文章是:

<a href="javascript:impeach(123,0);" class="small pull-right impeach">举报</a>

举报评论时为:

<a href="javascript:impeach(123,54);" class="small pull-right impeach">举报</a>

 

其中impeach(x,y)是写在.js中的一个方法,第一个参数为文章内容id,第二个参数为评论id.

当评论id为0时为举报文章内容,评论id不为0时为举报评论内容。

 

impeach方法中的内容大概如下:

function impeach(contentid, commentid) {
    layer.confirm('您确定要举报?恶意举报也是会受到惩罚的哦!', function (index) {
        $.ajax({
            url: "/a/impeach",
            type: "post",
            dataType: "json",
            data: { "contentid": contentid ,"commentid":commentid},
            success: function (data) {
                if ($.parseJSON(data).status != "-1" && $.parseJSON(data).status != "0") {
                    layer.msg($.parseJSON(data).msg, 1, 1);
            //todo:想将当前点击的按钮上的文字“举报”修改为“已举报
            //但是这里的$(this)并不是点击的按钮。在这个地方应该怎么得到当前点击的按钮。 }
else { layer.msg($.parseJSON(data).msg, 1, 3); } }, error: function () { layer.msg("请登录后再操作!", 2, function () { window.location = "http://passport.postcha.com"; }); } }); }, "提示信息"); }

但是试了一下,当前a标签并不能用$(this)来操作。

DZCMS的主页 DZCMS | 初学一级 | 园豆:5
提问于:2014-09-27 14:08
< >
分享
最佳答案
0

是想获取点击的A标签么?

是的话可以这样:

<a href="#" onclick="Del(this)">aaaaa</a>
<a href="#" onclick="Del(this)">bbbbb</a>
<a href="#" onclick="Del(this)">ccccc</a>
function Del(target){
     alert($(target).text());    
}
收获园豆:10
骑着蜗牛耍流氓 | 初学一级 |园豆:135 | 2014-09-28 09:57
其他回答(4)
0

好多博客都说了this的问题,这里没看出你是想怎么用,但是用的时候要慎重,不能确认的时候还是不要用this比较好,也可以参照下那些博客

draculav | 园豆:734 (小虾三级) | 2014-09-27 15:14

我把要处理的地方加了下红。就是将“举报”按钮上的文字变为“已举报

支持(0) 反对(0) DZCMS | 园豆:5 (初学一级) | 2014-09-27 15:29

@abc54288: 这个地方this应该是指的window,具体的话随便找一篇说this作用域的应该都会有讲

支持(0) 反对(0) draculav | 园豆:734 (小虾三级) | 2014-09-27 15:36
0

这是由于JS是Function作用域,也就是说success: function (data) {}里面的作用域改变了,比较简单的办法就是在$.ajax前面的代码中保存this变量,$this=$(this),然后下面就可以用了,高级的用法就是用apply,call或者JQ的Proxy来实现改变函数的作用域。

happydaily | 园豆:260 (菜鸟二级) | 2014-09-27 16:22
0

this 代表你当前 function的作用域 

还有就是 你应该吧红字部分的代码贴出来 

不然谁都不知道你什么意思

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-09-27 17:01
0

$.ajax里的this就是另外的了,你可以添加一个参数,把this传进去,然后在里面用

javascript:impeach(123,54,this) //调用

function impeach(contentid, commentid,_this) {
    layer.confirm('您确定要举报?恶意举报也是会受到惩罚的哦!', function (index) {
        $.ajax({
            url: "/a/impeach",
            type: "post",
            dataType: "json",
            data: { "contentid": contentid ,"commentid":commentid},
            success: function (data) {
                if ($.parseJSON(data).status != "-1" && $.parseJSON(data).status != "0") {
                    layer.msg($.parseJSON(data).msg, 1, 1);
            //todo:想将当前点击的按钮上的文字“举报”修改为“已举报”
            //在这里你就可以用$(_this) 了,记得前面的调用要传this阿喂。               }
                else {
                    layer.msg($.parseJSON(data).msg, 1, 3);
                }
            },
            error: function () {
                layer.msg("请登录后再操作!", 2, function () {
                    window.location = "http://passport.postcha.com";
                });
            }
        });
    }, "提示信息");
}

 

收获园豆:10
大楚打码人 | 园豆:4313 (老鸟四级) | 2014-09-28 17:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册