jQuery отменяет привязку события клика по уже выбранному переключателю - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь создать некоторые параметрические фильтры, но я не хочу вызывать функцию, которая делает мой вызов AJAX поиска, когда фильтр переключателя уже выбран.

$('#contentType input:enabled').bind('click', function(e){
    var $this = $(this),
        $type = this.type,
        $id = this.id;
    if ($type === 'radio') {
        if ($id === 'allContent'){
            sFrm.$boxes.attr({'checked': false});
            sFrm.$specificRadio.attr({'disabled': true});   
            searchAjax();
            removeFilter();
        }
    } else if ($type === 'checkbox') {
        if (sFrm.$boxes.filter(':checked').length === 0) {
            sFrm.$allRadio.trigger('click');        
        } else {
            var filterConfig = {
                index: $('.subFilter').index($this),
                txt: jQuery.trim($this.parent().text())
            }                   
            sFrm.$allRadio.attr({'checked': false});        
            sFrm.$specificRadio.attr({'disabled': false, 'checked': true}); 
            searchAjax();
            if ($this.is(':checked')) {
                addFilter(filterConfig);
            } else {
                removeFilter(filterConfig.index);
            }               
        }           
    }   
});

Итак, jQuery выше смотрит наВСЕ включенные входы в коллекции, и когда пользователь нажимает радиокнопку allContent , вызывается функция searchAjax .

Это верно, если указанная радиокнопка еще не выбрана/ проверено.В данный момент функция все еще вызывается, когда кнопка выбрана, и я хотел бы остановить это поведение, но не могу понять, как?

РЕДАКТИРОВАТЬ

Не уверен, что я объяснилправильно.Надеемся, что этот jsFiddle поможет:

http://jsfiddle.net/QsbRp/3/

В основном, если Все типы контента уже проверены и при проверке нажимается, тогда searchAjax не долженбыть призван.В настоящее время она вызывает функцию.

Когда она не отмечена и не нажата, она должна вести себя, как сейчас (отключить переключатель с родным братом и снять все флажки).

1 Ответ

1 голос
/ 12 июля 2011

Добавьте в начало вашего обработчика:

if ($this.is(":checked")) {
    return;
}

Обработчик события вернется и не выполнит остальную часть функции, если в данный момент выбран переключатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...