2013-03-05 3 views
3

Вот код:OnClick вызывается дважды

<label onclick="event.stopPropagation(); alert(event.target.innerHTML);"> 
    <button> 
     button 
    </button> 
    <span> 
     span 
    </span> 
</label> 

(и скрипку: http://jsfiddle.net/YsYKq/1/)

Если один нажимает на кнопку, только button предупреждается, но когда на пролете - как span и button предупреждаются - поэтому функция onclick вызывается дважды.

Как я могу предотвратить это? Мне нужно, чтобы onclick вызывался только один раз.

+1

'event.preventDefault();' вместо 'event.stopPropagation();' кажется, дает только щелкнул элемент. – Teemu

ответ

5

event.preventDefault(); вместо event.stopPropagation(); вызывает onclick только на щелкнутом элементе. Демо-версия: jsFiddle.

3

Пожалуйста, попробуйте выполнить код ниже. Я редактирую код и изменяю «stopPropagation» на «preventDefault».

<label onclick="event.preventDefault(); alert(event.target.innerHTML);"> 
    <button> 
     button 
    </button> 
    <span> 
     span 
    </span> 
</label> 
0

Предложение по @BenM Goes Совершенная Но если вы все еще хотите использовать кнопку ограждающих и диапазон, то вот так ...

<label for="notExistingId" onclick="event.stopPropagation(); alert(event.target.innerHTML);"> 
<button> 
    button 
</button> 
<span> 
    span 
</span> 

Просто укажите значение «для» в ярлыке с идентификатором, которого нет.

Надеется, что это помогает ..

0

Я решил эта проблему, используя разным поле идентификатора для этикеток и флажок - а затем проверить event.target.label для сценария этикетки

функции selectIconElement (эль, событие) {

if(event.target.id.indexOf('label')>0){ 
    //do something if its label 
}else{ 
    //do something if not label 
} 

}

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