2013-09-13 2 views
2

Я создал очень простой jsFiddle example обработчика щелчка назначается на два радиокнопки с:почему нажми обработчик вызывается дважды

$(document).ready(function() { 
     $(".title").on("click", function (event) { 
      alert('clicked'); 
     }); 
    }); 

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

<label class="title"> 
    <input type="radio" name="heading" checked="checked" />Introduction and General Information about the Marketing Tool 
</label> 
<label class="title"> 
    <input type="radio" name="heading" />Implementation Steps of the Marketing Tool 
</label> 
+1

вызывается один раз для меня –

+0

Это вызывается один раз для меня на скрипке. Вы пробовали на другом компьютере/браузере? – SpaceDog

+6

Кажется, что он вызывается только один раз, если вы нажмете переключатель, дважды, щелкнув метку. –

ответ

3

Вы используете title класс в обе эти метки, что означает, что он используется на обоих радиокартах. Когда вы нажимаете на нее, она запускает событие на обоих радиокартах. Вы должны делать свою работу с селектором радиокнопки:

$(document).ready(function() { 
    $(":radio").on("change", function (event) { 
     alert('clicked'); 
    }); 
}); 

demo

ссылка change

щелчком

$(document).ready(function() { 
    $(":radio").on("click", function (event) { 
     alert('clicked'); 
    }); 
}); 

demo

+0

он не спрашивает, как я думаю, он хочет только знать, что не так –

+0

я упоминаю в своем ответе –

0

Проблема пришедшая из <label>, потому что при нажатии на ярлыке, радио щелкнули, а также и наоборот. Если изменить <label> к <p>, эта проблема будет решена: DEMO HERE

<p class="title"> 
    <input type="radio" name="heading" checked="checked" />Introduction and General Information about the Marketing Tool 
</p> 

<p class="title"> 
    <input type="radio" name="heading" />Implementation Steps of the Marketing Tool 
</p> 

Или просто попробуйте добавить событие щелчка только ввести так:

$(document).ready(function() { 
    $(".title input[type='radio']").on("click", function (e) { 
     alert('clicked'); 
    }); 
}); 
+0

Вправо, привяжите клик к переключателю, а не к метке. –

0

Используйте событие изменения. Он будет работать нормально.

$(document).ready(function() { 
    $(".title").on("change", function (event) { 
     alert('clicked'); 
    }); 
}); 
+0

Вы говорите, что используете событие изменения, а затем ваш код использует клик. –

+0

Спасибо за указание. Была опечатка. – Sarcastic

1

Попробуйте

$(".title input").on("click", function (event) { 
    alert('clicked'); 
}); 
+0

@Scalpweb вы попробовали? –

0

Это происходит потому, что ваш <input> тег внутри тега <label>; так как нажатие на метку вызывает нажатие на радио, вы в основном щелкаете по радио два раза.

Если вы переместите тэг <input> из тега <label>, вы должны быть в порядке.

+1

Вы на самом деле не щелкаете радио дважды, вы дважды нажимаете метку. –

0

Это связано с областью элемента title.

Если вы добавите класс к входам, а затем привяжите событие к нему, он будет работать правильно.

HTML:

<label class="title"> 
    <input type="radio" class='checkbox' name="heading" checked="checked" />Introduction and General Information about the Marketing Tool</label> 
<label class="title"> 
    <input type="radio" class='checkbox' name="heading" />Implementation Steps of the Marketing Tool</label> 

Сценарий:

$(document).ready(function (e) { 
     $(".checkbox").on("click", function (event) { 
      alert('clicked'); 
     }); 
    }); 

Fiddle

-1

сделал некоторые изменения, и это работает отлично ...если ваш код корректен здесь ваш example

$(document).ready(function() { 
     $("input[type=radio]").on("click", function (event) { 
      alert('clicked'); 
     }); 
    }); 
+1

На самом деле это не так. Событие клика не было привязано как к кнопке, так и к метке, только к метке. Проблема в том, что щелчок на ярлыке также вызывает щелчок на переключателе. Таким образом, он срабатывает дважды, один раз для щелчка на ярлыке, затем щелчок, нажатый на радио, пузырится до метки и снова срабатывает. Сам переключатель не имеет привязки обработчика. –

+0

спасибо @JamesMontagne, у меня было две открытые скрипки, так запутались. в любом случае я буду более осторожен в следующий раз. :) –

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