2012-09-19 15 views
5

Bir site menüsünde kullanıcı tıklamalarını yakalamak için bir yöntem yazmaya çalışıyorum, ancak kullanıcının bir bağlantı noktasının üzerine gelmesi durumunda, işlemin kullanıcı için sessiz olmasını istiyorum. etiketi, normal şekilde davranır (içerdiği bağlantıyı gösterir).ajax isteği sonrasında HTML Bağlantı etiketi yönlendirme bağlantısı

<div class="selectNode" id="selectNode_1" style="color: rgb(229, 229, 229); background-color: rgb(47, 47, 47); "> 
    <a href="http://www.google.com" class="selectAnchor" style="color: rgb(229, 229, 229); "> 
    Google 
    </a> 
    <img class="childImage" src="icon.png"> 
</div> 

Ve jQuery, ben var:

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.stopPropagation(); 
    console.log(event.target.nodeName); 
    //event.preventDefault(); 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     return true; 
     } 
    }); 
}); 

bağlantı yönlendirir kodum aşağıdaki gibidir, ben bunu yapmak çeşitli şekillerde denedim ve neredeyse Şimdi çalışıyor olması Seçilen sayfa, ancak ajax kodu asla bitmez, böylece kullanıcının tıklamasını asla kaydetmez.

event.preventDefault kullanmayı denedim, ancak iptal edilen olayı devam ettirmenin bir yolu yoktur. Sorunun

Bölüm ekstra işlevsellik geliyor, diyelim ki, çoğu kullanıcı sağ

<a href="javascript:saveClick(o)">Google</a> 
gibi (+ tıklama denetimi ya da orta tıklama veya kullanmak) ve kullanarak bir şey, yeni bir sekmede açmak için çapa etiketi tıklamanız Sitede

izin verilmez (güvenlik nedeniyle).

Bunun nasıl yapılabileceği konusunda herhangi bir öneriniz var mı?

cevap

13

Kullanım event.preventDefault ardından başarısına, location.href = self.href

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.preventDefault(); 
    console.log(event.target.nodeName); 
    var self = this; 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     location.href = self.href; 
     } 
    }); 
}); 

kullanmak Veya kaldırmak için bağlam özelliğinin faydalanmak var self = this

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.preventDefault(); 
    console.log(event.target.nodeName); 

    $.ajax({ 
     type: 'POST', 
     context: this, 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     location.href = this.href; 
     } 
    }); 
}); 
+0

üzerinde benzer bir şey denedim, ve sol tıklama durumunda çalışır, ancak kontrol + sol tıklama veya orta tıklama bağlantıyı aynı pencerede açar. Bağlantıların bazıları ayrıca target = "_ blank" içeriyor, bu nedenle bu yöntem de üzerinde çalışmayacaktı. – desto

+0

Bu işlevselliği korumak istiyorsanız, yapabileceğiniz fazla bir şey yok. Etkinliğin gerçekleşmesini engellemezseniz, ajax isteğiniz tamamlanmaz. Etkinliği engellerseniz, diğer işlevler korunamaz. –

+0

Çıkışı izledikten sonra yönlendiren bir ara sayfa oluşturmayı düşündünüz mü? –

0

jquery O zaman bu bu

<div class="selectNode" id="selectNode_1" style="color: rgb(229, 229, 229); background-color: rgb(47, 47, 47); "> 
    <a href="#" class="selectAnchor" style="color: rgb(229, 229, 229); "> 
    Google 
    </a> 
    <img class="childImage" src="icon.png"> 
</div> 

deneyin:

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.preventDefault(); 
    console.log(event.target.nodeName); 
    //event.preventDefault(); 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     window.location = "http://www.google.com" 
     } 
    }); 
}); 
+0

Benzer bir şey denedim ve sol tıklama durumunda çalışır, ancak sol tıklama tıklatır veya sol tıklatır veya aynı pencerede bağlantıyı tıklatır. Bağlantıların bazıları ayrıca target = "_ blank" içeriyor, bu nedenle bu yöntem de üzerinde çalışmayacaktı. – desto

+0

@desto - düzenlenmiş, bu kesinlikle işe yarayacaktır, sadece bir şey var üzerinde fare bağlantısı göreceksiniz ki –