0

我有这个链接:

$('.popup-window').click(function (e) {
    e.preventDefault();

    $.ajax({
        ...
    })
});

这是一个.NET LinkBut​​ton(一个调用javascript的链接,而不是真正的href)。如果 ajax 返回一些(假设是假的),我想阻止 Default 。否则,如果为真,则继续使用该链接处理程序。

我该怎么做?

PS 我一开始就需要它e.preventDefault();,否则 .NET 处理程序将立即采取行动。

4

3 回答 3

1

我想我明白你在找什么。

这是我的想法:使用dataDOM 元素上的属性来决定是否应该阻止默认事件。最初,该事件被阻止,但 ajax 有权“解锁?” 它,然后再次开火。这是一些定制工作,但它可能会奏效:

var $popupWindow=$('popup-window');

// initially "tell" the LinkButton to prevent default
$popupWindow.data('prevent-default', 1);

// the click event (initially prevents default)
$popupWindow.click(function(e){
    var $this=$(this);

    if ($this.data('prevent-default')==0) { // if "unlocked"

        // "lock" it again (default isn't prevented)
        $this.data('prevent-default', 1);

    } else { // if "locked"
        // default is prevented
        e.preventDefault();

        // test if it should be unlocked
        $.ajax({
            // ...
        }).done(function(data){
            if (data.length>0 && data.response==false) {
                // set the attribute so it shouldn't prevent default
                $this.data('prevent-default', 0);

                // trigger this click (should let the event fire completely)
                $this.trigger('click');
            }
        });
    }
});

更新:

另一种方法是添加页面方法。

(参见:使用jQuery直接调用ASP.NET AJAX页面方法

这会将机制简化为这样的想法:

$('popup-window').click(function(e){
    e.preventDefault();

    $.ajax({
        // ...
    }).done(function(data){
        if (data.length>0 && data.response==false) {
            $.ajax({
                type: "POST",
                url: "YourPage.aspx/YourMethod",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    // Replace the div's content with the page method's return.
                    $("#Result").text(msg.d);
                }
            });
         }
     });
});
于 2013-09-20T08:59:12.600 回答
1

您可以使用__doPostBack()js 函数在 AJAX 回调中触发回发。

唯一的事情是您需要传入导致回发的控件的 id,例如

 __doPostBack('btnPopup', null);

你可以在这个问题中看到更多关于这个函数的信息:如何使用 __doPostBack()

于 2013-09-20T09:40:27.707 回答
0
 $('.popup-window').click(function (e) {
data = '?sample=1' //serialized data here
callback    = function(json){
    if(json.returnVar!=true){ //check if returnVar is not true
        e.preventDefault();   //prevent redirect if not true
    }
};

$.ajax({
      type: 'POST',
      url: "../ajaxcall.php", //the url to call for ajax here
      data: data,
      success: callback,
      dataType: 'json'
    });
});

试试这个,如果你看不懂代码,请告诉我

于 2013-09-20T08:48:28.290 回答