我正在尝试通过操作jQuery选择器来自己创建一个文本编辑。但是,在第一次ajax回调之后,其他回调相同的输入文本不再起作用了......
function editaVal(celDiv, id)
{
var novoConteudo = $("<input type='text' id='novoCont" + id + "' value='" + $(celDiv).html() + "' />");
$(celDiv).dblclick(function()
{
$(this).html(novoConteudo);
});
$(novoConteudo).blur(function()
{
$(novoConteudo).parents("tr").removeClass('trSelected');
$.ajax({
type: 'POST',
url: '/SuperAdmin/SalvaValor/?busca=' + $(novoConteudo).val() + '&codValor=' + id,
beforeSend: function()
{
$(celDiv).html($("#loading").show());
},
success: function()
{
$(celDiv).html($("#loading").hide());
$(celDiv).html(novoConteudo.val());
}
});
});
}
我的问题是:我该如何重新绑定?重新绑定模糊事件...当我模糊输入文本时,第二个ajax回调没有任何反应。
谢谢!
答案 0 :(得分:9)
您可以使用jQuery.live,(jQuery 1.3+)。它将处理程序绑定到所有当前和将来匹配元素的事件。
答案 1 :(得分:5)
您将"onblur"
处理程序附加到ajax更新后被删除的元素。如果您希望事件持续存在,只需在创建时将其绑定 (即在dblclick
上):
function editaVal(celDiv, id)
{
$(celDiv).dblclick(function()
{
var text = $(this).html();
var novoConteudo = $('<input type="text" />')
.appendTo($(this).empty())
.attr('id', 'novoCont' + id)
.val(text)
.blur(function()
{
$(this).parents("tr").removeClass('trSelected');
$.ajax({
type: 'POST',
url: '/SuperAdmin/SalvaValor/?busca=' + $(this).val() + '&codValor=' + id,
beforeSend: function()
{
$(celDiv).html($("#loading").show());
},
success: function()
{
$(celDiv).html($("#loading").hide());
$(celDiv).html(novoConteudo.val());
}
});
});
});
}
答案 2 :(得分:3)
如果您创建一个设置页面或重新绑定控件的函数,然后在Ajax调用成功时调用该函数,那么这可能有效。
EDIT
试一试......
success: function()
{
$(celDiv).html($("#loading").hide());
$(celDiv).html(novoConteudo.val());
ConfigMyInputs();
}
function ConfigMyInputs()
{
//foreach item
//configure double click
//configure blur
}
function MakeMyAjaxCall() {
//AJAX CODE HERE
}