2012-06-01 127 views
1

我想用一個按鈕來分配下面的函數,但由於某種原因,函數中的'location.href'部分不起作用。如果我從一個按鈕更改爲一個div,它可以工作,所以問題似乎與按鈕。location.href不適用於按鈕

它怎麼不起作用,有沒有辦法解決它(我真的想用一個按鈕)?

<button id="back">Cancel</button> // Doesn't work 
<div id="back">Cancel</div> // Works 

    $('#back').click(function(){ 
     var imageId = $('#id').attr('href'); 
     var id = imageId.split('/'); 
     location.href = '/blog/' + id[3]; 
    }); 
+0

你有一個「id」作爲你的DOM中的Id元素? – Shyju

+1

如果他沒有,那麼'console.log(...)'也不起作用,是嗎?沒有理由不行,除非您同時在文檔中同時具有*兩個*這些元素(共享'id')。你可以[在JS小提琴重生](http://jsfiddle.net/)? –

回答

1

你的問題不是按鈕,你的問題是,當你綁定一個點擊一個默認的行爲元素,如linkbutton ,瀏覽器將執行該腳本,但首先會按照默認行爲開始。

你要麼使用return false;防止默認行爲從觸發,同時也防止與元素相關聯的其他動作冒泡:

看到這個工作Fiddle Example

$('#back').click(function(){ 
    return false; // prevent the regular click action for the element 
    alert('bubu'); // this will not run 
}); 

或使用.preventDefault();只阻止默認行爲,但執行與元素相關聯的其他操作:

看到這個工作Fiddle Example

$('#back').click(function(event){ 
    event.preventDefault(); // prevent the regular click action for the element 
    alert('bubu'); // this will run 
}); 

在這個問題上有一篇很好的文章here

0

看起來像它的ID而不是類問題?我用ID來試這個例子,但它沒有工作,但切換到類,它很好。

http://jsfiddle.net/rexzc/

+0

謝謝,我甚至用id也可以工作。但是,'location.href'部分沒有。 – holyredbeard

1

好吧,我設法解決它自己。問題是你顯然需要添加'preventDefault();'如果你使用一個按鈕來讓'location.href'工作。

我的修改,現在工作的代碼是:

$('#back').click(function(e){ 
     e.preventDefault(); 
     var imageId = $('#id').attr('href'); 
     var id = imageId.split('/'); 
     location.href = '/blog/' + id[3]; 
    }); 
0

一個按鈕會嘗試提交表單或文檔,如果點擊,您可以使用type ='button'屬性來防止這種情況。

相關問題