2012-09-03 401 views
0

我對Javascript/Ajax比較新。抓取.click的URL

當用戶點擊某些網址時,我希望完全用Javascript/jquery來處理點擊。

<a class="row_edit" href="/sales_item/edit/{{ item.id }}"></a> 

我所做的是一個JavaScript添加到此HTML文件:

$(document).ready(function() { 
     $(".row_edit").click(row_edit); 
    }); 

    function row_edit() { 
     var url = $(this).attr("href") + "/"; 
     ... 
    } 

這工作得很好,我每次點擊row_edit,JavaScript已經發射並做部分網站加載爲了我。但有些情況下,似乎實際的鏈接會觸發(我看到部分網站加載爲整個屏幕)。看起來有一個競賽條件。

我認爲確保只有javascript被觸發的最好方法是將href的內容更改爲#。這樣我確保url本身不會去,只有我的JavaScript正在解僱。但是,如何才能在row_edit()中獲得我的url值?

也許我在這裏採取了錯誤的做法。你們如何解決這個問題?

+0

你的意思是你想阻止加載網址是什麼? –

+1

通過刪除'href'你會完全打破你的網站的非JS用戶,它也可能永遠不會被谷歌正確蜘蛛。 – Dunhamzzz

+0

該網站是每個登錄只爲企業客戶。無論如何,谷歌蜘蛛應該留在外面。 ;-) – Houman

回答

2

爲了確保只有JavaScript是射擊(取消點擊的默認操作(導航)),您必須調用preventDefault();在點擊處理程序中。

例:

$(document).ready(function() { 
     $(".row_edit").click(row_edit); 
    }); 

    function row_edit(event) { 
     var url = $(this).attr("href") + "/"; 
     ... 
     event.preventDefault(); 
    } 
+1

IMO這是最好的做法,因爲如果JavaScript被禁用,點擊將像平常一樣進行。在其他情況下解釋什麼都不會發生。 – andlrc

+1

您不需要在那裏添加額外的功能。無論如何,row_edit的第一個參數將是事件:$(「。row_edit」)。click(row_edit); – Alex

+0

@Alex你是對的!我更新了我的答案。 – mabbas

1

我不確定使用javascript而不是href執行重定向的意圖。不管怎麼說,途徑之一是這裏...

如果您正在實施支持「數據 - 」現代瀏覽器(HTML5),那麼你可以使用這些屬性

<a class="row_edit" data-url="/sales_item/edit/{{ item.id }}" href="#"></a> 

和修改JavaScript來獲得適當的屬性值

var url = $(this).attr("data-url") + "/"; 
+0

+1感謝這幾乎是我一直在尋找。是的,我正在使用基於HTML5的Twitter-Bootstrap。關於你的問題,我正在編輯行(ajax),而不是加載整個頁面。因此使用JavaScript而不是href。 – Houman

0
<a href="#"> click me </a> 
  1. '#' 用於阻擋clcik

  2. 通過jquery阻止默認事件。

  3. 添加您的新事件處理程序。

參考鏈接(jQuery的): -

http://jsfiddle.net/8LeaP/