我正在尝试使用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');
}
});
});
如何在上面的函数中访问按钮变量,以便我可以将模板附加到它?
答案 0 :(得分:4)
上面的代码应该可以使用,因为success
函数是在定义button
的上下文中创建的。
如果它不起作用,那么其他东西可能会被打破。更多选择:
[编辑] 问题是button.parentNode
; button
是一个jquery节点,而不是DOM节点(var button = $(this);
)。请改用button.parent()
。
答案 1 :(得分:0)
调用其他预定义函数,这使您能够将按钮作为参数传递 这将使您获得成功:
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');
}