我在小部件区域有一个“重新加载”按钮的页面。小部件包含textareas和单选按钮。当我点击重新加载按钮时,我正在尝试设置textarea的文本并选择单选按钮。
我当前的代码正在首次点击重新加载按钮。 textarea和单选按钮使用测试值正确设置。
然后我输入textarea并更改它的文本,然后选择一个不同的单选按钮值。当我单击重新加载按钮时,textarea和单选按钮应该重新加载它们的测试值。
但是,只重新加载textarea的值。单选按钮的选择不会返回到测试选择。为什么这只在我第一次点击重新加载按钮时才有效?
这是我的代码:
$('.refreshTextandRadio').click(function () {
var itemName_Text = $(this).attr('reloadName_Text');
var itemName_Radio = $(this).attr('reloadName_Radio');
var evalID = $(this).attr('evalID');
$.ajax({
type: "POST",
url: "JDFormAJAX_Reload.asp",
data: 'itemName_Text=' + itemName_Text + '&evalID=' + evalID,
success: function (msg) {
$("textarea#" + itemName_Text).val(msg);
}
})
$.ajax({
type: "POST",
url: "JDFormAJAX_Reload.asp",
data: 'itemName_Radio=' + itemName_Radio + '&evalID=' + evalID,
success: function (msg) {
$('input[name="' + itemName_Radio + '"][value="' + msg + '"]').attr('checked', true);
}
})
});
ajaxURL页面只返回测试值,并不足以包含在此处。有没有人知道为什么这个代码在第一次点击时设置了两个值,但只恢复textarea而不是后续点击的radiobutton?
答案 0 :(得分:1)
对于动态生成的内容,您应该将事件处理程序附加到未使用Ajax 生成(重新)生成的html元素,而不是Ajax重新生成的元素(在您的case,你的按钮有.refreshTextandRadio
类。
因此,您应该将click事件附加到不受Ajax影响的下一个更高(父)元素。仅举例说明,我将使用document
,它肯定高于您的任何按钮,并在那里附加您的点击处理程序。
所以你的原始代码:
$('.refreshTextandRadio').click(function () {
//your actions
});
可以重写为:
$(document).on('click','.refreshTextandRadio',function(){
//your actions
});
当然,您需要使用较低的父元素(不受Ajax影响,如上所述),以提高代码效率。
希望这有帮助!