2012-01-18 2 views
0

Я помещаю ввод внутри a-тега. И я хочу остановить ссылку при нажатии, чтобы изменить значение на входе. Как это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. Любые идеи, почему это так.

EDIT
Мой реальный сценарий, который я получил код, как это ниже. Теперь, что я делаю, так это то, что когда кто-то щелкнет где-нибудь внутри TR, он возьмет ссылку href. Поэтому проблема заключается в том, что отправка формы (не в разметке) приведет к ссылке .. там, где я хочу делать то, что я объяснил выше, и именно поэтому я использую вход внутри ссылки в тесте.

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

Зачем вам вводить ввод в ссылку? Поместите их бок о бок, если вы используете ярлык и сохраняете функциональную функцию ввода. –

+0

Недопустимый HTML-код для ввода элемента 'input' внутри элемента' a'. –

+1

Ваш jsFiddle настроен на использование MooTools, а не jQuery, и не соответствует коду, опубликованному в вопросе. –

ответ

1

Это должно быть preventDefault():

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

Делать это в .focus() не имеет значения, вы должны "отменить" только .click().

Updated fiddle.

+0

Я просто хочу прояснить это. не останавливается, чтобы сделать это? –

+1

stopPropagination & preventDefault - это разные вещи. подробнее читайте здесь http://dev-tricks.com/event-preventdefault-and-event-stoppropagation-and-event-stopimmediatepropagation/ –

+0

@Umesh спасибо за ссылку - от того, что я лично понимаю, '.stopPropagation()' используется для остановки «настраиваемого» кода при вызове, в то время как '.preventDefault()' предотвратит действие браузера по умолчанию. –

0

Вы можете использовать return false;:

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

See fiddle here.

Я обычно использую это, когда мне нужно делать то, что вы хотите.

Смежные вопросы