click () в jQuery может запустить кнопку на стороне сервера - PullRequest
0 голосов
/ 11 августа 2011

У меня есть вид сетки asp.net.Внутри него у меня есть 2 кнопки ImageButton, например, так:

<ItemTemplate>
 <asp:ImageButton class="DeleteLineItem" style="display:none;" ID="ibDelete" runat="server" CommandName="DeleteRow" ImageUrl="images/d.gif"
                                                        ToolTip="Delete Line Item?" />
  <asp:ImageButton class="TempDeleteLineItem" OnClientClick="return false;" runat="server" ToolTip="Delete Line Item?" ImageUrl="images/d.gif" />
                                            </ItemTemplate>

Обратите внимание, что видимость первого установлена ​​на false, у второго - OnClientClick="return false;", чтобы избежать повторного сообщения ...

Моя цель - удалить строку из вида сетки с эффектом затухания, а затем вызвать код на стороне сервера за ibDelete (первый, видимость которого установлена ​​в false).

$(".TempDeleteLineItem").click(function() { 
    $(this).closest("tr").fadeOut(5000, function() { 
        alert('hi1');
        $(this).remove();
        alert('hi2');
        $(this).closest(".DeleteLineItem").trigger('click');
        alert('hi3');
    }); 
});

Все предупрежденияотображение и эффект затухания работает, и я не получаю ошибку сценария .. но событие click не срабатывает.Я, должно быть, неправильно использую trigger ()?

Редактировать

Я также пытался

$(".TempDeleteLineItem").click(function() { 
    $(this).closest("tr").fadeOut(5000, function() { 
        alert('hi1');
        $(this).prev(".DeleteLineItem").bind('click');
        $(this).remove();
        alert('hi2'); 
    }); 
});

И я пытался .trigger, и я пытался .live и все, кажется, одна и та же проблема.У меня работает фейдер и работает удаление, но событие щелчка не срабатывает ...

Ответы [ 7 ]

1 голос
/ 11 августа 2011

Вы ищете prev () , например: $(this).prev('.DeleteLineItem').trigger('click')

closest () = "Получить первый элемент-предок, соответствующий селектору, начиная с текущего элемента и продвигаясь вверх по дереву DOM."

Также я понятия не имею, как будет выглядеть ваш asp, когда он будет сгенерирован, было бы неплохо сказать мне :) Я на стороне PHP ...

1 голос
/ 11 августа 2011

Ваш элемент управления ibDelete - Visible="false", он не будет отображаться на клиенте, поэтому он не может быть запущен JavaScript.Простым решением было бы скрыть это с помощью CSS:

.DeleteLineItem { display: none; }

Поскольку ваш селектор, похоже, не работает, вероятно, это может быть:

$(this).closest ('tr').find ('.DeleteLineItem').trigger ('click');

Предполагается, что сетка отображается в видетаблица, без вложенных таблиц.

Если она выберет кнопку, но не запустит обратную передачу, попробуйте скопировать onclick, сгенерированный в вашей функции, что-то вроде:

WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("some$naming$container$ibDelete", "", true, "", "", false, false));

Это будетвручную спровоцируйте ответную запись.

Обратите внимание, что самый правильный способ реализовать это - написать свой собственный WebControl, который реализует IPostBackEventHandler, и на клиенте вызовет __doPostBack (...); послеЗатухание.

1 голос
/ 11 августа 2011

Когда вы устанавливаете для видимости серверного элемента управления значение false, HTML для этого элемента управления не отображается, и, следовательно, ваш jquery даже не находит элемент управления и не происходит триггера (проверьте исходный вид своей страницы, и вы не найдете изображениекнопка есть).Вместо того, чтобы устанавливать Visible = "false", вам нужно сделать элемент управления скрытым, используя CSS, т.е. установить класс css для этой кнопки, который имеет display: none.Затем он будет отображаться в HTML, и ваш jquery вызовет событие нормально.

0 голосов
/ 31 июля 2013

Попробуйте .live ()

Его следует использовать, как показано ниже, для последней версии Jquery: 1.9 и более поздних версий

$('body').on('click', '.myButton', function)

перейдите по этой ссылке для последнего использования функции. jQuery 1.9 .live () не является функцией

0 голосов
/ 11 августа 2011

Есть ли причина, по которой вам нужно вызвать кнопку с помощью JS / jQuery?Я могу упустить нюанс здесь, но кажется, что вы можете просто добавить OnClientClick = "doFadeEffect (this)" к кнопке изображения ibDelete.Когда они щелкают по нему, вызывается doFadeEffect, и у вас появляется возможность затушевывать строку.Тогда, пока doFadeEffect возвращает true, обратная передача будет происходить как обычно.

0 голосов
/ 11 августа 2011

Я не думаю, что вы хотите запускать нажатие кнопки, так как это заставит вашу страницу перезагрузиться, что сделает излечение довольно бессмысленным. Вам нужно добавить метод ajax на сервер, используя WCF или инструменты MS AJAX. Затем вы вызываете это с помощью метода jQuery ajax, чтобы он выполнял удаление на сервере.

0 голосов
/ 11 августа 2011

попробуй

.live('click',function(){/*.. function */}) 

и

.bind('click',function(){/*.. function */})

посмотри, дают ли они лучшие результаты

edit

live() сейчас не рекомендуется, тебе надоиспользуйте вместо этого .delegate.http://api.jquery.com/delegate/

и для более новых версий jQuery (1.7+) вы должны использовать .on() http://api.jquery.com/on/

Если вы прочитаете заметки .on(), вы увидите, что.live() больше не рекомендуется для любых версий.Были некоторые серьезные проблемы, которые были изложены во многих постах здесь и др.

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