2012-01-18 48 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.

我一般都用這個,當我需要做你想做的。