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.

阅读 3.9k
4 个回答

作用域的问题。

$('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 + ')');
$('a#post-getpost').attr('onclick', 'getpost('+n.id+')');

试试

'getpost('+n.id+')'
这样?

必须照楼上这样写啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题