2015-01-09 152 views
15

我正在構建一個可通過將腳本放入預設目錄來擴展的Web應用程序。該腳本需要在轉到頁面之前讀取文件頭,因此當單擊鏈接並首先運行一些JScript時,我需要使用.preventDefault()。不幸的是,我不能讓過去的.preventDefault()jquery .click()event.preventDefault()不起作用

這裏是我的鏈接的格式:

<a href="path/to/file.php" class="filelink">Some Text</a> 

這裏就是我試圖用停止默認操作的jQuery:

$('.filelink').click(function(e) { 
     e.preventDefault(); 
     //do some other stuff here 
    }); 

編輯:

更多信息:

<script>...</script>是我的頁腳。 此功能是INSIDE $(document).ready之後調用一個$.ajax建立鏈接列表此功能試圖監聽點擊。

$(function(){ 

//your code here 

}); 

+1

你在你的jquery語句中缺少關閉''''。由於語法錯誤,點擊事件永遠不會被觸發。 – r3wt 2015-01-09 23:14:30

+0

大聲笑,實際上是在那裏編輯它,當你評論。我在這裏輸入它時錯誤地輸入了它。它現在看起來和myscript中的完全一樣,但不會被解僱。 – KingRichard 2015-01-09 23:16:46

+0

我回滾了編輯,因爲還不清楚錯字是否只是在編輯時出現問題或實際代碼。正如所寫的,對於固定的錯字,我沒有看到你描述的問題的原因。 – 2015-01-09 23:17:46

回答

45

由於您的聯繫是動態地附加到頁面,則需要使用document.on()來捕獲點擊事件。

以追加事件偵聽器的動態內容的語法如下

$(document).on(event, selector, callback);

所以你的點擊處理程序將變爲:

$(document).on('click','.filelink',function(e){ 

e.preventDefault(); 

//code here 

return false; 

}); 
+0

感謝。我不知道這是關於動態附加元素的。你知道這是爲什麼嗎? – KingRichard 2015-01-09 23:35:29

+2

,因爲當您創建clickhandler時,即在dom加載時,該元素不存在。 jQuery不會偵聽選擇器列表中的新元素,它會非常低效,並且會在包含動態內容的頁面上崩潰。 – r3wt 2015-01-09 23:35:33

+1

'return false'實際上並不是必須的。 preventDefault()應該足夠了。 – amenthes 2015-01-09 23:36:45

1

是你的代碼包圍?或

$(document).ready(function(){ 

//your code here 

}); 

? ,因爲在添加點擊偵聽器之前,您應該等到<a></a>元素準備就緒。嘗試上面的代碼或將代碼放置在</body>標記之前的HTML底部或<a></a>元素之後。應工作

編輯:因爲您的聯繫是動態地添加打電話給你$('.filelink').click()功能將它們添加

+0

在添加事件偵聽器之前,您不必等到dom準備就緒,您只需要以確保代碼在元素存在後執行。 – 2015-01-09 23:21:59

+0

@KevinB其實你是對的,謝謝 – 2015-01-09 23:24:03

+0

@SpencerWieczorek凱文說這個腳本必須在之後,這是正確的,並且不必在document.ready中 – KingRichard 2015-01-09 23:33:29

1

之後我想你錯過 $(文件)。就緒()

請更新您的代碼如下:

$(document).ready(function(){ 
    $('.filelink').click(function(e) { 
     e.preventDefault(); 
     //do some other stuff here 
    }); 

}) 
0

我有同樣的問題,因爲我改變了窗口.location.search in my event handler:

$('.filelink').click(function(e) { 
     e.preventDefault(); 
     window.location.search = "something"; 
}); 

要解決我的問題,我使用window.location.hash(這是我想要的更多)。