Оба этих селектора найдут всех div
с, которые не имеют класса radio_tab
, и применят к ним обработчики щелчков. Это, вероятно, удивительно неэффективно, помимо того, что вы не хотите делать. То, что вы пытаетесь сделать ($("*:not('div.radio_tab')")
), было бы еще хуже.
Одним из альтернативных подходов может быть применение обработчика щелчков к телу документа и проверка цели события, чтобы определить, является ли оно div.radio_tab
или одним из его дочерних элементов. Если нет, то спрячьте div и отсоедините обработчик событий. Что-то вроде этого (код написан здесь, а не проверен!):
// attach the event handler to the body, where it will hear about
// any clicks that don't have default behavior (like links);
// use a namespaced event, so that it can be easily removed
$(document.body).bind("click.radio_tab",function(evt){
// make sure the click is outside the div in question
if( $(evt.target).closest("div.radio_tab").length === 0 ) {
// hide the div, or whatever else needs to be done
$("div.radio_tab").hide();
// unbind the event, since it's no longer needed
$(this).unbind("click.radio_tab");
}
});