0

在过去的几个小时里,我一直在寻找解决方案,但无济于事。当我单击 OnClientClick 中返回 false 的按钮时,服务器不会发生回发。当我使用jquery触发按钮的点击功能时,首先触发OnClientClick,但不管返回值如何,都会发生回发。这是一个简单的示例...

k...放置更准确地演示问题的代码。抱歉混淆了...

    <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="script/jquery-1.4.2.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <img onclick="$('#Button1').click();" runat="server" width="100" height="100" style="border:solid 1px black" /><br />
        <asp:Button ID="Button1" OnClick="Button1_Click" OnClientClick="return false;" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

回答一些被问到的问题......我有一个用户控件。它是一个使用两个图像和一个隐藏按钮来调用服务器的翻转按钮。该按钮使用反射来启用任何指定的 OnClick 处理程序,以调用控件所在的特定页面上的函数。如果需要,OnClientClick 还用于提供额外的 Javascript 操作。当我直接连接了一个不可见但可点击的按钮时,一切正常。我决定让按钮真正不可见,甚至不显示它,但这需要我让图像真正触发按钮的点击事件。

4

3 回答 3

0

I think you've misunderstood the purpose of the jQuery click handler in this context, and you're not returning false in the onClientClicked event.

There is no reason to use the onClientClicked property to wire up a jQuery click handler for a server side button or image. Just wire up a script call in there to whatever script you need to execute.

Like this:

<asp:Button ID="Button2" runat="server" Text="Trigger" onClientClick="doClientSideCheck();" />

<script type="text/javascript">
  function doClientSideCheck()
  {
    return false;
  }
</script>

On the other hand when you have client side button or image this is where the jQuery click handler is appropriate.

<input id="button1" type="button" class="myButtonClass" value="Submit" />

    <script type="text/javascript">
     $(document).ready(function()
        {
             $(".myButtonClass").click(function(e) { alert('button clicked ' + $(this).attr('id') ); });
         });
    </script>
于 2010-03-15T20:47:33.307 回答
0

The runat="server" indicates that a postback is required. If you're not getting it for Button1, it's probably because you have an OnClick and an OnClientClick in the same tag and the combination is overriding the runat attribute.

于 2010-03-15T20:50:45.577 回答
0

jQuery 的 click 方法不像 OnClick 方法那样返回 true 或 false ——而是返回对自身的引用。这是为了便于链接 jQuery 方法调用。

理想情况下,您想要的是从 Button1 和 Button2 的 javascript 中调用相同的方法,而不是让一个按钮调用另一个按钮。如果您需要一些需要回发的条件,您可以在其中调用 Button1.GetPostbackEventReference。

如果你使用 CSS 类来处理它,jQuery 也会让这件事变得非常简单:

<asp:Button ID="Button1" CssClass="ButtonHandler" />
<asp:Image ID="Button2" CssClass="ButtonHandler" />

<script>
$(document).ready(function() {
    $(".ButtonHandler").click( function() {
        // stuff you want to do
        return false;
    });
});
</script>

这可能不是您所需要的,但我认为您需要更详细地了解您到底想要什么。

于 2010-03-15T21:02:15.073 回答