2012-01-18 47 views
0

我在a-tag内输入一个输入。我想在单击以更改输入值时停止链接。像这样stopPropagation不会停止父动作

HTML

<div id="contain"> 
    <a href="http://www.stackoverflow.com" target="_blank" id="link"> 
     <input id="clickme" type="text" value="1"></input> 
     Buy 
    </a> 
</div> 

jQuery的

$('#clickme').focus(function(e){ 
    e.stopPropagation(); 
}); 

$('#clickme').click(function(e){ 
    e.stopPropagation(); 
}); 

的jsfiddle:http://jsfiddle.net/GKvw3/1/

结果是,它还是到stackoverflow.com。任何想法为什么这是。

编辑
我的真实情景是,我有这样的标记如下。现在我所做的是当有人在TR内部的任何地方点击链接href。所以问题变成提交表单(而不是标记)会导致链接..因为我想做我上面解释的,这就是为什么我在测试中使用链接内的输入。

<table> 
    <tr> 
    <td><a href="#">headline</a></td> 
    ... 
    <td><input type="submit" id="submitme" value="buy"/></td> 
    </tr> 
</table> 
+2

你为什么要在链接中输入一个输入?如果您的标签可点击并保持输入功能,请将它们并排放置。 – 2012-01-18 11:30:05

+0

将一个'input'元素放在'a'元素中是无效的HTML。 – 2012-01-18 11:31:13

+1

您的jsFiddle设置为使用MooTools而不是jQuery,并且与您在问题中发布的代码不匹配。 – 2012-01-18 11:32:40

回答

1

它应该是preventDefault()

$('#clickme').click(function(e){ 
    e.preventDefault(); 
}); 

.focus()做是不相关的,你需要 “取消” 只有.click()

Updated fiddle

+0

我只想在此明确。是不是停止传播呢? – 2012-01-18 11:37:41

+1

stopPropagination&preventDefault都是不同的东西。在这里详细阅读http://dev-tricks.com/event-preventdefault-and-event-stoppropagation-and-event-stopimmediatepropagation/ – 2012-01-18 11:40:29

+0

@ Umesh谢谢你的链接 - 从我个人的理解,'.stopPropagation()'用于阻止“自定义”代码的调用,而.preventDefault()会阻止浏览器的默认操作。 – 2012-01-18 11:54:39

0

您可以使用return false;

$('#clickme').click(function(e){ 
    return false; 
}); 

See fiddle here.

我一般都用这个,当我需要做你想做的。