Остановка распространения jQuery неэффективна

#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 не требуется (прочитайте другие ответы, чтобы узнать, почему).