html - javascript if判断执行体中无法使用变量

查看:67
本文介绍了html - javascript if判断执行体中无法使用变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var pagepath = window.location.pathname;
            $.ajax({
                type: 'post',
                url: '{{ url_for("getposts") }}',
                data: {'category':pagepath},
                success: function (msg) {
                    $.each(msg, function (i, n) {
                        var row = $('#post-clone').clone();
                        var postid = n.id;
                        console.log(postid);
                        row.find('#post-name').text(n.name);
                        row.find('#post-author').text(n.author);
                        row.find('#post-ctime').text(n.ctime);
                        row.find('#post-mtime').text(n.mtime);
                        row.find('#post-small').text(n.small);
                        row.find('#postcontainer_p').text(n.container);
                        if ( n.author == '{{ g.user.username }}') {
                            $('a#post-getpost').attr('onclick', 'getpost(n.id)');
                        }

                        row.appendTo('#post-content').css('display', 'block')
                    })
                }
            });

javascript if判断执行体中无法使用变量
问题在于getpost(n.id),会报错.提示n未定义.
数据使用json传递到jquery.

解决方案

作用域的问题。

$('a#post-getpost').attr('onclick', 'getpost(n.id)');

这段代码结果应该是在dom中

<a id="post-getpost" onclick="getpost(n.id)"></a>

在这里函数名getpost、参数n都是全局的。
而在

$.each(msg, function (i, n) {

回调中n的作用域限制在回调函数里,并且此时全局没有n这个变量
所以n是undefined
可以改成

$('a#post-getpost').attr('onclick', 'getpost(' + n.id + ')');

这篇关于html - javascript if判断执行体中无法使用变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆