、CSS方法
.disabled { pointer-events: none; }
二、jQuery方法
方法一
$(this).click(function (event) {
event.preventDefault();
}
方法二
$('a').live('click', function(event) {
alert("抱歉,已停用!");
event.preventDefault();
});
注:此方法中的live亦可以為on, bind等方法
方法三
$('.disableCss').removeAttr('onclick'); //去掉標簽中的onclick事件
通過removeAttr方法來控制html標簽的屬性已達到啟用或禁用事件。另, 使用這種方式也可以控制其他事件或其他效果。
方法四
$('#button').attr('disabled',"true");//添加disabled屬性
$('#button').removeAttr("disabled"); //移除disabled屬性
注:和方法三是一樣的, 不過disabled屬性一般用在類型為button或submit的input上
<div class="subcategories">這里有點擊事件</div>
<div class="subcategories">這里有點擊事件</div>
<div class="subcategories">這里有點擊事件</div>
<script type="text/javascript">
//阻止點擊事件
$(function() {
$(".subcategories").click(function(event) {
event.stopPropagation();
});
});
</script>
么是JS事件冒泡?
在一個對象上觸發某類事件(比如單擊onclick事件), 如果此對象定義了此事件的處理程序, 那么此事件就會調用這個處理程序, 如果沒有定義此事件處理程序或者事件返回true,
那么這個事件會向這個對象的父級對象傳播, 從里到外, 直至它被處理(父級對象所有同類事件都將被激活), 或者它到達了對象層次的最頂層, 即document對象(有些瀏覽器是window)。
如何來阻止Jquery事件冒泡?
通過一個小例子來解釋
<!DOCTYPE html>
<html>
<head runat="server">
<title>Porschev---Jquery 事件冒泡</title>
<script src="jquery-1.3.2-vsdoc.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<div id="divOne" onclick="alert('我是最外層');">
<div id="divTwo" onclick="alert('我是中間層!')">
<a id="hr_three" href="http://www.baidu.com" mce_href="http://www.baidu.com"onclick="alert('我是最里層!')">點擊我</a>
</div>
</div>
</form>
</body>
</html>
比如上面這個頁面,
分為三層:divOne是第外層,divTwo中間層,hr_three是最里層;
他們都有各自的click事件,最里層a標簽還有href屬性。
運行頁面,點擊“點擊我”,會依次彈出:我是最里層---->我是中間層---->我是最外層
---->然后再鏈接到百度.
這就是事件冒泡, 本來我只點擊ID為hr_three的標簽, 但是確執行了三個alert操作。
事件冒泡過程(以標簽ID表示):hr_three----> divTwo----> divOne 。從最里層冒泡到最外層。
如何來阻止?
1.event.stopPropagation();
<script type="text/javascript">
$(function() {
$("#hr_three").click(function(event) {
event.stopPropagation();
});
});
<script>
再點擊"點擊我", 會彈出:我是最里層, 然后鏈接到百度
2.return false;
如果頭部加入的是以下代碼
<script type="text/javascript">
$(function() {
$("#hr_three").click(function(event) {
return false;
});
});
<script>
再點擊"點擊我", 會彈出:我是最里層, 但不會執行鏈接到百度頁面
由此可以看出:
1.event.stopPropagation();
事件處理過程中,阻止了事件冒泡,但不會阻擊默認行為(它就執行了超鏈接的跳轉)
2.return false;
事件處理過程中,阻止了事件冒泡,也阻止了默認行為(比如剛才它就沒有執行超鏈接的跳轉)
還有一種有冒泡有關的:
3.event.preventDefault();
如果把它放在頭部A標簽的click事件中, 點擊"點擊我"。
會發現它依次彈出:我是最里層---->我是中間層---->我是最外層, 但最后卻沒有跳轉到百度
它的作用是:事件處理過程中, 不阻擊事件冒泡, 但阻擊默認行為(它只執行所有彈框, 卻沒有執行超鏈接跳轉)
覽網頁時,當從A頁面點擊跳轉到B頁面后,一般情況下,可以點擊瀏覽器上的“后退”按鈕返回A頁面。
如果進入B頁面后,B頁面想讓訪問者留下,禁止返回,是否可以實現呢?
這簡直是要控制瀏覽器的行為,雖然有些邪惡,但確實可以實現,使用特殊的JavaScript代碼就可實現。
方法如下:
監聽瀏覽器的popstate事件,該事件會在用戶點擊瀏覽器的回退按鈕時被觸發。
然后,使用History.pushState()方法向當前瀏覽器會話的歷史堆棧中添加一個陷阱狀態,該狀態會使“回退”操作無效。
<script>
//瀏覽器返回鍵事件
pushHistory();
window.addEventListener("popstate", function(e) {
//判斷移動端
var userAgentInfo = navigator.userAgent;
var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
var equipmentType = false;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) != -1) {
equipmentType = true;
break;
}
}
if (equipmentType) {
$("#mask-back").show();
$("#mask-back .back-close").on("click", function() {
$("#mask-back").hide();
})
}
pushHistory(); //注,此處調用,可以讓用戶一直停留著這個頁面
}, false);
function pushHistory() {
var stateeee = {
title: "title",
url: "#"
};
window.history.pushState(stateeee, "title", "#");
}
</script>
建立兩個文件:a.html、b.html。
a文件內容簡單寫一句代碼:
<a href="b.html">goto b.html</a>。
b文件內容寫入上面的源碼。
打開a頁面,點擊鏈接進入b頁面,這時再點擊瀏覽器上的“后退”按鈕,會發現:操作無效,無法后退。
這個黑暗的技巧,雖然使用了不常見的技術方法,但查看頁面源碼很容易發現其實現原理。
為了保護代碼、防止代碼被分析,可以對上面的JavaScript代碼加密,加密使用JShaman。
進入JShaman官網,貼入代碼:
在配置中,勾選“字符串加密”:
然后生成混淆加密的JavaScript代碼:
復制粘貼回b文件:
這時,代碼成為加密狀態,雖然不影響運行,是萬萬不可能了。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。