2017-07-14 46 views
-2
執行預防HREF在

所以我在我的HTML這下面的代碼:從通過Javascript

<li class="" id="toolbar_section"><a id="toolbar_section_child" href="#foobar" onclick="return toolbarSetSection(this);" data-toggle="checkpoint">foobar</a></li> 

而且寫在我的JavaScript是:

<script type="text/javascript"> 
    function toolbarSetSection(event){ 
     //some logic which leads to 
     return false; 
    }; 
</script> 

然而,在href仍執行。 ..我已經檢查了很多類似的話題,如event.preventDefault();但他們也不幫助我。

+0

ooops我做了event.preventDefault(),但是它扔的只是一個打印錯誤 – Cira

+1

在它太遲之前刪除它xD –

+0

你是否曾經需要使用'href'?因爲如果你不這樣做,只需使用'而不是''。 – Toastrackenigma

回答

1

在您的HTML中,您應該將onclick="return toolbarSetSection(this);"更改爲onclick="toolbarSetSection(event);",然後在您的JavaScript函數中有event.preventDefault();

你完整的代碼是:

<li class="" id="toolbar_section"><a id="toolbar_section_child" href="#foobar" onclick="toolbarSetSection(event);" data-toggle="checkpoint">foobar</a></li> 

function toolbarSetSection(event) { 
    event.preventDefault(); 
    return false; 
}; 
+0

這不起作用:( – Cira

+0

你的問題很可能與其他的東西有關係,這裏的代碼是獨立的,Stephan和Travis Acton的解決方案也可以,如果你發佈了其他的代碼,我們可以幫忙 –

+0

Ahhhhhhh好吧,我知道了,其中一個javascript與我正在進行的一個衝突,並以某種方式發生衝突,謝謝你的幫助! – Cira

1

return false通常應該可以工作,但也許在您的toolbarSetSection函數中有錯誤。

調用event.preventDefault()通常也應該有效。但是,對於您的情況,您希望以event作爲第一個參數調用函數,而HTML代碼將第一個參數作爲鏈接對象調用onclick="return toolbarSetSection(this);"。也許你想打電話toolbarSetSection(event);

+0

據我所知,沒有錯誤,因爲邏輯執行完全正常,Web控制檯沒有顯示任何錯誤。至於toolbarSetSection(event);它不工作。 – Cira

+0

您如何注意到它不起作用以及您使用的是哪種瀏覽器? – Stephan

+0

在MacOS atm上使用Chrome時,它不起作用,因爲它仍然導致我重定向到其他部分。 – Cira

0

一個更好的方式來獲得預期的行爲,而不在標籤上

<script> 
document.getElementById('toolbar_section_child').on('click', function(e){ 
    e.preventDefault(); 
}) 
</script> 

加入onclick假設你有一個uniqueid for a標籤。

編輯 用於動態創建的元素使用事件代表團

document.addEventListener('click',function(e){ 
    /* 
    if(e.target && e.target.id == 'toolbar_section_child'){ 
     e.preventDefault(); 
    } 
    */ 
    // using a common class name 
    if(e.target && e.target.className.split(" ").indexOf("toolbar_section_child") != -1){ 
     e.preventDefault(); 
    } 
}) 
+0

嗯,在我目前的情況下,這不會是非常有效的,因爲我使用嵌入式ruby生成元素,因爲整個頁面是非常動態的,如果我要這樣做,很多JavaScript將被加載到頁面中,而不是隻加載一個javascript可以處理來自任何元素的請求。我也想感謝你抽出時間來幫助我,非常感謝! – Cira

+0

@Cira瞭解: )也許你可以給''''標記你想阻止他們的默認行爲一個普通的類名稱,並設置一個監聽器的點擊事件 – taha

+0

哦,是的,我試圖做到這一點,但不知何故,它不工作,JavaScript只是撿起最初加載到頁面上的點擊,並沒有選擇使用AJAX加載的點擊,所以我放棄了這一點,並使用onclick哈哈。 – Cira

0

HTML

<ul> 
<li class="" id="toolbar_section2"><a id="toolbar_section_child" href="#" onclick="toolbarSetSection()" data-toggle="checkpoint">foobar</a></li> 
</ul> 

JS

function toolbarSetSection() 
{ 
alert('started'); 
event.preventDefault(); 
alert('weee'); 
} 

的jsfiddle所以你不能說這是不工作:): https://jsfiddle.net/rgoopw18/1/

+0

嗨,感謝您花時間幫助我,我只是試了一下,並以某種方式通過了兩個警報,然後它觸發了href。它實際上不工作...... :(現在我想起來了,data-toggle =「checkpoint」會不會影響它? – Cira

+0

https://jsfiddle.net/rgoopw18/3/我將href轉到谷歌和我正在衝擊這個鏈接,現在沒有重定向。 –

+0

Ahhhhhhh好吧,我知道了,其中一個javascripts與我正在進行的一個衝突,並以某種方式衝突。 – Cira