Как прервать обратную передачу кнопки ASP.NET с помощью BlockUI и Jquery - PullRequest
1 голос
/ 15 марта 2009

У меня есть страница ASP.NET с несколькими экземплярами ASP: Button. Для некоторых мне нужно показать запрос подтверждения, и, если пользователь выберет yes, будет вызван оригинальный метод обратной передачи. В противном случае общий процесс отменяется.

У меня работает пример, но я получаю противоречивые результаты, в основном в FF3, где выдается исключение:

[Exception... "Illegal operation on WrappedNative prototype object"  nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"  location: "JS frame :: 

Я посмотрел на эту ошибку, но я теряю то, что я делаю не так. Вот мой пример дела. Обратите внимание, сейчас я просто использую класс css для поиска. В долгосрочной перспективе я могу встроить clientID элемента управления в мой JS, если это окажется необходимым:).

фрагмент HTML:

<asp:Button ID="StartButton" runat="server" CssClass="startbutton" Text="Start" OnClick="OnStartClicked" />

Javascript:

$(".startbutton").each(function(){
            $(document).data("startclick", $(this).get()[0].click);
            $(this).unbind("click");
        }).click(function(){
            var oldclick = $(document).data("startclick");
            alert("hello");
            try
            {
                oldclick();
            }
            catch(err)
            {
                alert(err);
                alert(err.description);
            }
            return false;
        });

Мой код относительно прост, метод OnStart просто выполняет Response.Write

Я только начал изучать привязку, снятие привязки и запуск, поэтому мое использование здесь в основном «впервые».

Спасибо за любую помощь или совет.

S

EDIT:

Это описывает то, что я пытаюсь сделать, а также дает ряд подводных камней:

http://www.nabble.com/onClick-prepend-td15194791s27240.html

Ответы [ 4 ]

2 голосов
/ 15 марта 2009

Как насчет этого?

$(document).ready( function() {
    $('.startbutton').click(function() {
        return confirm('Are you sure?');
    })
});
1 голос
/ 15 марта 2009

Я решил свою проблему для IE7 и FF3.

Хитрость заключается в том, чтобы заставить постбэк работать как «onclick» через атрибут ASP.NET на кнопке (см. Ниже). В Javascript это извлекается как ссылка на функцию, когда вы читаете щелчок в JQuery.

Чтобы заставить его работать, вы затем очищаете атрибут onclick (после его сохранения) и вызываете его позже.

Мой код ниже показывает это в действии. Этот код не завершен, так как я частично превращаю это в общий запрос для моего приложения. Это также немного плохо выложено! Но, по крайней мере, это показывает принцип.

Кнопка ASP.NET

<asp:Button ID="StartButton" runat="server" CssClass="startbutton" Text="Start" OnClick="OnStart" UseSubmitBehavior="false" />

Javascript:

$(".startbutton").each(function(){
            $(document).data("startclick", $(this).attr("onclick"));
            $(this).removeAttr("onclick");
        }).click(function(){

            $.blockUI({ message: $('#confirm'), css: { width: '383', cursor: 'auto' } }); 

            $("#yes").click(function(){ 

                $.unblockUI();
                var oldclick = $(document).data("startclick");
                try
                {
                    oldclick();
                }
                catch(err)
                {
                    alert(err);
                    alert(err.description);
                }
            });

            $("#no").click(function(){
                $.unblockUI();
            });


            return false;
        });
0 голосов
/ 17 июня 2009

для ми работ: this.OnClientClick = "$ .blockUI ({message: $ ('# ConfirmacionBOX'), css: {width: '275px'}}); вернуть false;"; Это кнопка (это кнопка класса)

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

Ваша проблема возникает отсюда:

$(document).data("startclick", $(this).get()[0].click);
...
var oldclick = $(document).data("startclick");
...
oldclick();

Здесь вы пытаетесь перехватить собственный прослушиватель событий, но есть две ошибки:

  1. Использование unbind не приведет к удалению собственного прослушивателя событий, а только тех, которые добавлены с помощью jQuery
  2. click, AFAIK, метод только для IE, используемый для имитации щелчка, но не сам обработчик события

Вы должны будете использовать onclick вместо того, чтобы установить его значение в null вместо использования unbind. Наконец, не сохраняйте его в $(document).data(...), у вас будут проблемы при добавлении других кнопок. Вот пример кода, который вы можете использовать:

  $("selector").each(function()
  {
    var oldclick = this.onclick;
    this.onclick = null;
    $(this).click(function()
    {
      if (confirm("yes or no ?")) oldclick();
    });
  });
...