2015-02-24 186 views
1

我有一個問題,jQuery的preventDefault運行標記的onclick函數。這是我的例子:Avoid page jump on # clickjQuery preventDefault()停止onclick工作

$("#main a").bind("click", function (e) { 
    e.preventDefault(); 
}); 

我想了preventDefault將停止違約事件(HREF = 「#」)。但是,它會讓「onclick」事件發生。如果我把這個函數放在我的函數中,它就可以工作但我想在鏈接上使用不同的onclick函數。

+2

這不是1999年,擺脫了內聯事件處理程序,問題解決了! – adeneo 2015-02-24 11:04:17

+0

adeneo是正確的,你綁定兩個點擊一個單一的元素。一個使用inline javascript'onclick =「...」',另一個使用jQuery'$(「#main a」)。bind(「click」...',只需刪除內嵌的一個。 – 2015-02-24 11:07:42

+0

您可以將點擊使用jQuery或純js(相同的@adeneo和@Jeremy)爲了在事件發生後檢查某些特定的行爲(取決於用戶來自的鏈接),我會在處理事件的函數內部執行它 – newpatriks 2015-02-24 11:13:54

回答

2

正如adeneo和Jeremy所提到的,不要使用內聯事件處理程序。他們會干擾你的jQuery事件處理程序。

簡單地合併2種功能於一體,它將工作:

$("#main a").bind("click", function (e) { 
    e.preventDefault(); 

    var p = $(this).position(); 
    $("#loader").css("top", p.top - 20); 
    $("#loader").toggle(); 
}); 

JSFiddle


如果我把我的函數裏面的功能它的工作原理。但我想在鏈接上使用不同的onclick函數。

如果您想在不同的鏈接上使用不同的onclick函數,請使用類(或ID)並使用jQuery進行適當的選擇。

HTML:

<div id="main"> 
    <p><a class="doSomething" href="#">I will NOT JUMP!</a></p> 
    <p><a class="doSomethingElse" href="#">I will NOT JUMP</a></p> 
</div> 

的jQuery:

$("#main a.doSomething").bind("click", function (e) { 
    e.preventDefault(); 

    var p = $(this).position(); 
    $("#loader").css("top", p.top - 20); 
    $("#loader").toggle(); 
}); 

$("#main a.doSomethingElse").bind("click", function (e) { 
    e.preventDefault(); 

    //Other code 
}); 

JSFiddle demo