将数据传递给匿名Javascript函数

将数据传递给匿名Javascript函数,javascript,jquery,Javascript,Jquery,我正在尝试使用jQuery查询Web服务,并使用jQuery模板将回复插入我的html页面。我的代码当前如下所示: $(function () { $('.media-releases h3 div').click(function () { var button = $(this); if ($(this).hasClass("expand")) { $(this).addClass("spinner"); var params = '{

我正在尝试使用jQuery查询Web服务,并使用jQuery模板将回复插入我的html页面。我的代码当前如下所示:

$(function () {
  $('.media-releases h3 div').click(function () {

    var button = $(this);
    if ($(this).hasClass("expand")) {
        $(this).addClass("spinner");
        var params = '{ "year": "' + 2012 + '", "month": "' + 02 + '" }';

        $.ajax({
            type: "POST",
            url: "NewsReleases.asmx/GetNewsReleases",
            data: params,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var result = jQuery.parseJSON(response.d);
                $.get('NewsRelease.htm', function (data) {
                    // The problem is here, button is null. 
                    // I assume I have to create a closure 
                    // but I'm not sure how to do it.
                    var ul = button.parentNode.nextSibling;
                    $.tmpl(data, result).appendTo(ul);
                });

                button.removeClass("spinner");
                button.parents('h3').next().slideDown();
                button.removeClass('expand').addClass('minimise');

            },
            error: function (error) {
                /*Error handling code removed*/
            }
        });

    } else {
        button.parents('h3').next().slideUp();
        button.removeClass('minimise').addClass('expand');
    }
});
}))


如何在上述函数中访问button变量,以便将模板附加到它?

调用其他预先定义的函数,这使您能够将按钮作为参数传递 这将使您获得成功:

success: function (response) {
                onSuccess(response,button);
            },
您新创建的函数如下所示:

function onSuccess(response,button){
    var result = jQuery.parseJSON(response.d);
                    $.get('NewsRelease.htm', function (data) {
                        /*The problem is here, button is null. I assume I have to create a closure but I'm not sure how to do it.*/
                        var ul = button.parentNode.nextSibling;
                        $.tmpl(data, result).appendTo(ul);
                    });

                    button.removeClass("spinner");
                    button.parents('h3').next().slideDown();
                    button.removeClass('expand').addClass('minimise');
}

调用其他预定义函数,这使您能够将按钮作为参数传递 这将使您获得成功:

success: function (response) {
                onSuccess(response,button);
            },
您新创建的函数如下所示:

function onSuccess(response,button){
    var result = jQuery.parseJSON(response.d);
                    $.get('NewsRelease.htm', function (data) {
                        /*The problem is here, button is null. I assume I have to create a closure but I'm not sure how to do it.*/
                        var ul = button.parentNode.nextSibling;
                        $.tmpl(data, result).appendTo(ul);
                    });

                    button.removeClass("spinner");
                    button.parents('h3').next().slideDown();
                    button.removeClass('expand').addClass('minimise');
}

上面的代码应该已经可以工作了,因为
success
函数是在定义了
按钮的上下文中创建的

如果它不工作,那么其他东西可能坏了。其他选择:

  • 检查您的错误控制台
  • 逐步完成JS调试器中的代码

[编辑]问题在于
按钮。parentNode
button
是jquery节点,而不是DOM节点(
var button=$(this);
)。改为使用
按钮.parent()

上面的代码应该已经可以工作了,因为
success
函数是在定义了
按钮的上下文中创建的

如果它不工作,那么其他东西可能坏了。其他选择:

  • 检查您的错误控制台
  • 逐步完成JS调试器中的代码

[编辑]问题在于
按钮。parentNode
button
是jquery节点,而不是DOM节点(
var button=$(this);
)。使用
button.parent()

你说得对,返回未定义的不是按钮,而是按钮的parentNode属性。如果我在Chrome中检查button.parentNode,它似乎填充得很好,但在执行var node=button.parentNode时,它会显示未定义。知道为什么会这样吗?知道。您使用的是jquery节点,而不是DOM节点(
var-button=$(this);
)。请尝试
button.parent()
。没错,返回未定义的不是按钮,而是buttons parentNode属性。如果我在Chrome中检查button.parentNode,它似乎填充得很好,但在执行var node=button.parentNode时,它会显示未定义。知道为什么会这样吗?知道。您使用的是jquery节点,而不是DOM节点(
var-button=$(this);
)。尝试
按钮。父项()