将数据传递给匿名Javascript函数
我正在尝试使用jQuery查询Web服务,并使用jQuery模板将回复插入我的html页面。我的代码当前如下所示:将数据传递给匿名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 = '{
$(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);
)。尝试按钮。父项()
。