Rac*_*hel 5 asp.net jquery iis-6 iis-5 asp.net-2.0
我是jQuery的新手,但我的页面上有一些链接可以切换单击时可见的表单部分,或者如果禁用了javascript,它会执行完整的回发以切换这些部分
它在我的测试环境中工作正常,PostBack发生在jQuery脚本之后,但是一旦我部署它,PostBack就会发生在jQuery click事件之前.它部署在运行IIS 6.0的Windows 2003服务器上,而我的测试环境是Windows XP/IIS 5.1/VS2010
这是我正在使用的代码.该脚本在生产中运行,如果我把它放入.ready()而不是.click()在.click()我甚至没有得到警报,所以我假设问题是在jQuery脚本有机会执行之前发生PostBack.
jQuery的:
$(document).ready(function () {
// Toggle Details
$('.toggleDetailsButton').click(function () {
alert('test');
$(this).parentsUntil(".parentRow").parent().next().toggleClass("hidden");
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
Protected Sub rpData_ItemCommand(ByVal sender As Object, ByVal e As RepeaterCommandEventArgs) Handles rpData.ItemCommand
// Manually toggle rows here
End Sub
Run Code Online (Sandbox Code Playgroud)
ASP:
<asp:Repeater ID="rpData" runat="server">
<ItemTemplate>
<tr class="parentRow">
...
<asp:Button runat="server" ID="cmdViewDetails"
CommandName="ToggleDetails" Text="details"
CssClass="buttonAsLink toggleDetailsButton" />
...
</tr>
<tr id="rpData_DetailsRow" class="detailsRow hidden" runat="server">
</tr>
</ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
编辑
根据下面评论中的建议,运行jQuery函数onClientClick会使页面按原样运行,但是我仍然想知道为什么PostBack在我的测试环境中的jQuery事件之后,但在生产中的jQuery事件之前发生.
我也注意到了两者之间的其他差异.例如,我还有一个按钮可以打开/关闭搜索div,它可以在测试中正常工作但不能在生产中工作.它用于$('.toggleSearchButton').next()在搜索按钮下获取div并切换它的类名.在生产中,该对象返回[object Object],但是调用.attr('class')返回undefined(也是如此.attr('id'),.attr('tag')和.nodeName).在我的测试环境中,它为我的搜索div返回正确的值.
我已经在IE,FF和Chrome中测试了这种行为.在我的测试机器上,它在所有3上运行正常.在我的生产机器上,只有IE以它应该的方式工作.
尝试这个:
$('.toggleDetailsButton').click(function (e) {
if (e.stopPropagation) e.stopPropagation();
if (e.preventDefault) e.preventDefault();
.
.
});
Run Code Online (Sandbox Code Playgroud)
默认情况下按钮呈现一个提交按钮。您还可以设置 UseSubmitBehavior="false" 以使其成为一个<input type="button" />元素,然后看看这是否会给您带来更好的结果。