繁体   English   中英

我可以继续使用之前的防止链接吗?

[英]Can I continue with a previous prevent link?

我有这个链接:

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

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

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

我该怎么做?

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

我想我明白你在寻找什么。

这是我的想法:使用DOM元素上的data属性来决定是否应该阻止默认事件。 最初,事件被阻止,但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);
                }
            });
         }
     });
});

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

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

 __doPostBack('btnPopup', null);

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

 $('.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'
    });
});

试试这个,如果您无法理解代码,请告诉我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM