为什么我的PostBack发生在我的jQuery点击事件之前?

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以它应该的方式工作.

Bri*_*ins 0

尝试这个:

$('.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" />元素,然后看看这是否会给您带来更好的结果。