![](/img/trans.png)
[英]mailto link (in chrome) is triggering window.onbeforeunload - can i prevent this?
[英]Can I continue with a previous prevent link?
我有这个链接:
$('.popup-window').click(function (e) {
e.preventDefault();
$.ajax({
...
})
});
这是一个.NET LinkButton(一个调用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.