#javascript #jquery #events #javascript-events
#javascript #jquery #Мероприятия #jquery-события
Вопрос:
Я просто в полном замешательстве, я просмотрел множество похожих вопросов, но я не могу понять, почему это событие click продолжает распространяться.
Вот код:
$("#view-radio").buttonset().bind('click', function(e) {
redraw(Testimonials);
e.stopPropagation();
});
Вот переключатели
<div id="view-radio" class="i-obj buttonset">
<input type="radio" id="gridradio" name="view-radio" checked="checked" value="grid" />
<label for="gridradio"> <img src="http://SwolePersonalTraining.com/beta/wp-content/themes/striking/images/gridview.jpg" class="icon">Grid View</label>
<input type="radio" id="listradio" name="view-radio" value="list" />
<label for="listradio"><img src="http://SwolePersonalTraining.com/beta/wp-content/themes/striking/images/listview.jpg" class="icon">List View</label>
</div>
Вы можете найти страницу в действии здесь:http://swolepersonaltraining.com/beta/?page_id=380
Вот полный код: http://swolepersonaltraining.com/beta/wp-content/themes/striking/js/custom/custom_testimonial.js?ver=3.1.3
Есть идеи?
Комментарии:
1. Вы пробовали просто
return false;
вместоe.stopPropagation();
? Что такое «Отзывы»? Похоже, что это должна быть строка. Возможно, у вас синтаксическая ошибка, из-за которойe.stopPropagation();
вызов не выполняется.2. Чего вы хотите достичь с помощью
e.stopPropagation();
?3. Как вы видите, когда я нажимаю переключатель, он дважды вызывает функцию redraw (). Предполагается, что это вызывается только один раз.
4. возвращает false; вызывает его один раз, но затем значение набора кнопок не изменяется. Таким образом, даже когда вы нажимаете на список, он остается в сетке.
Ответ №1:
Я не могу поклясться в этом, потому что это сложно протестировать на вашем живом сайте, но я думаю, что происходит то, что вы привязали click
событие view-radio
div вместо каждой из двух переключателей внутри него.
Я бы попробовал что-то вроде:
$("#view-radio").buttonset(). // Turn radio buttons of the div in a buttonset
find('input').bind('click', // Bind the click event of each of the two radios
....
Редактировать:
Да! Это работает! http://jsfiddle.net/marcosfromero/TDsrj /
И stopPropagation
не требуется (прочитайте другие ответы, чтобы узнать, почему).