2012-06-01 92 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'属性来防止这种情况。

相关问题