Вот упрощенная версия моей страницы:JQuery событие не работает на асинхронном постбэка, фиксируя на 2 постбэка, разбивая на третий
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
var cbFuncInit = function() {
$('div').click(function(evt) {
if (evt.target.type !== 'checkbox') {
var checkbox = $(':checkbox', this);
checkbox.attr('checked', !checkbox.attr('checked'));
evt.stopPropagation();
return false;
}
});
};
$(document).ready(function() {
cbFuncInit();
});
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div id="myDiv" style="background-color:red;height:50px;width:50px;">
<asp:checkbox ID="Checkbox1" runat="server" ></asp:checkbox>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div id="myDiv" style="background-color:red;height:50px;width:50px;">
<asp:checkbox ID="Checkbox1" runat="server"></asp:checkbox>
</div>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1"/>
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</form>
</body>
</html>
Вот упрощенный код фоновым:
protected void Button1_Click(object sender, EventArgs e)
{
var list = new List<string> { "", "", "" };
Repeater1.DataSource = list;
Repeater1.DataBind();
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "", "cbFuncInit();", true);
}
Вот проблема:
Страница позволяет вам щелкнуть div, чтобы щелкнуть его вложенный флажок. Однако при выполнении обратной передачи для большего количества флажков, а затем используя ScriptManager.RegisterStartupScript для повторной записи событий, исходный div больше не доступен для клика, а новые divs ...
ОДНАКО (он становится лучше) ...
При нажатии на кнопку еще раз, все дивы кликабельны теперь ...
НО WAIT ...
При нажатии на кнопку второй раз, первый DIV снова, больше не доступен для кликов.
Кто-нибудь знает почему? Мне было интересно, связано ли это с JQuery's event object. К сожалению, мои навыки отладки JavaScript немного превосходят нас. Спасибо за любые ответы.
Это решило мою проблему. Спасибо. – 2009-10-25 03:28:10