click () не ведет себя как пользовательский клик - PullRequest
0 голосов
/ 15 марта 2010

Я искал решение этой проблемы последние несколько часов, но безрезультатно. Когда я нажимаю на кнопку с возвращаемым значением false в OnClientClick, обратная передача на сервер не происходит. Когда я использую 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>

Чтобы ответить на некоторые вопросы, которые были заданы ... У меня есть пользовательский элемент управления. Это кнопка прокрутки, использующая два изображения и скрытую кнопку для вызова сервера. Кнопка использует Reflection для включения любого указанного обработчика OnClick для вызова функции на конкретной странице, на которой находится элемент управления. OnClientClick также используется для предоставления дополнительных действий Javascript, если они мне нужны. Все работало нормально, когда была подключена невидимая, но нажимаемая кнопка. Я решил сделать кнопку действительно невидимой и даже не отображать ее, но для этого потребовалось, чтобы изображения фактически инициировали событие нажатия кнопки.

Ответы [ 3 ]

0 голосов
/ 15 марта 2010

runat = "server" указывает, что требуется обратная передача. Если вы не получаете его для Button1, возможно, это связано с тем, что у вас есть OnClick и OnClientClick в одном теге, и комбинация переопределяет атрибут runat.

0 голосов
/ 16 марта 2010

Метод click в jQuery не возвращает true или false, как метод OnClick, - вместо этого он возвращает ссылку на себя. Это должно облегчить создание цепочки вызовов метода jQuery.

В идеале вам нужно вызывать один и тот же метод из javascript для Button1 и Button2, а не просто вызывать одну кнопку другой. Если вам нужно какое-то условие, когда требуется обратная передача, вы можете добавить туда вызов Button1.GetPostbackEventReference.

jQuery также делает это действительно простым, если вы используете класс CSS для его обработки:

<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>

Это может быть не совсем то, что вам нужно, но я думаю, что вам нужно немного подробнее рассказать о том, что именно вы хотите.

0 голосов
/ 15 марта 2010

Я думаю, вы неправильно поняли цель обработчика щелчков jQuery в этом контексте, и вы не возвращаете false в событии onClientClicked.

Нет причин использовать свойство onClientClicked для подключения обработчика щелчков jQuery для кнопки или изображения на стороне сервера. Просто подключите вызов сценария к любому сценарию, который вам нужно выполнить.

Как это:

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

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

С другой стороны, когда у вас есть кнопка или изображение на стороне клиента, именно здесь подходит обработчик щелчков jQuery.

<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>
...