2013-11-14 73 views
0

如果加載我的網站,你有沒有$_SESSION(您還沒有登錄),我會送你這個<head>jQuery/bubbling - 如何阻止我未登錄的用戶的JavaScript代碼?

<script src="/js/jquery-2.0.3.min.js"></script> 
<script src="/js/requires-signup.js"></script> 
<script src="/js/core.js"></script> 

core.js文件包含整個網站的JavaScript代碼。例如:

$(document).on('click', '.ajaxload-tab', function(){ 
    console.log('I shall do the load!'); 
    return false; 
}); 

然而,對於非登錄用戶,這是由requires-signup.js文件,其內容爲先:

$(document).on('click', '.requires-signup', function(){ 
    console.log('No can do!'); 
    return false; 
}); 

現在,我服你這個元素:

<div class="ajaxload-tab requires-signup">CLICK</div> 

你點擊這個元素。你的控制檯說:I shall do the load!爲什麼?

編輯

如果我刪除.ajaxload-tab事件綁定的return false;部分,代碼工作正常。但是,我不能刪除那部分,因爲那樣它會弄亂其他東西。

+1

你意識到這可以很容易地繞過了吧? –

+0

我不在乎。我有我的ajax調用保護。 –

回答

1

也許嘗試在core.js在您需要,signup.js使用.off()像這樣

$(document).on('click.requires-signup', '.ajaxload-tab', function(){ 
    console.log('I shall do the load!'); 
    return false; 
}); 

的需要,signup.js

$(document).off(".requires-signup") 

http://api.jquery.com/off/

編輯:或者這個方法,如果你不介意globals

window.notSignedUp = false; 

$(document).on('click.requires-signup', '.ajaxload-tab', function(){ 
    if (window.notSignedUp) return; 
    console.log('I shall do the load!'); 
    return false; 
}); 

然後設置window.notSignedUp =真正的需要,signup.js

0

試着改變你加載在你的頭標記的文件的順序,這樣的事情:

<script src="/js/jquery-2.0.3.min.js"></script> 
<script src="/js/core.js"></script> 
<script src="/js/requires-signup.js"></script> 

我認爲你的問題是,你是第一個在「單擊」事件設置的元素爲了console.log'No can do!',然後,當你加載core.js時,你用一個新函數覆蓋這個「click」事件。不過,我推薦使用兩個單獨的元素,並根據需要顯示/隱藏它們。

相關問題