Эта функция скрытия работает при щелчке в любом месте документа, за исключением элементов, использующих виджет jQuery UI MultiSelect.

Я оформляю несколько элементов Select с помощью неупорядоченных () списков HTML, и эта функция должна скрывать эти элементы, когда пользователь щелкает в любом месте за пределами области элемента, но по какой-то причине она не работает, когда пользователь щелкает элементы, которые используют виджет jQuery UI MultiSelect.

ОБНОВЛЕНИЕ. Я создал jsfiddle, чтобы продемонстрировать проблему http://jsfiddle.net/chayacooper/ezxSF/4/ Нажмите, чтобы открыть элемент с пометкой 'Элемент UL'. Если вы наведете указатель мыши на любой из раскрывающихся элементов для 'Элемент UL' или щелкнуть документ или другой элемент, он работает должным образом, но остается открытым, если щелкнуть 'MultiSelect Element', не наведя указатель мыши на какой-либо из 'элементов UL'< /em> предметы.

$('html').click(function(e){
  if(e.target.id == 'dropdown_box1') {
            $("#select1").show();
  } else {
            $("#select1").hide();
  }
 });

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

$('.multiselect').click(function() {
    $("#select1").hide();
});      

HTML

<div id="dropdown_box1"><span>Select</span></div>
<div class="dropdown_container" id="dropdown_container1">  
    <ul id="select1"> 
        <!-- Several List Item Elements --> 
    </ul>
</div>

У меня есть отдельная функция mouseleave, которая скрывает элемент списка, когда пользователь наводит на него указатель мыши, но не срабатывает, если пользователь щелкает, чтобы открыть его, но не наводит указатель мыши на элемент списка.

    $(document).ready(function () {
        $("#dropdown_box1").click(function () {
            $("#select1").show();
        });
        var timeoutID;
        $("#select1").mouseleave(function () {
              timeoutID = setTimeout(function () {
                  $("#select1").hide();
            }, 800);
        });
          $("#select1").mouseenter(function () {
            clearTimeout(timeoutID);
        });
     });

person Chaya Cooper    schedule 03.03.2013    source источник


Ответы (1)


Вы пытались использовать .blur(), чтобы скрыть список? Вы можете попробовать:

$("#select1").blur(function(){
     $(this).hide();
});

Раньше я не использовал плагин multiselect, и я не тестировал его, но я думаю, что лучше проверять, когда элемент теряет фокус, чем добавлять событие к каждому элементу и проверять, когда он щелкнул. Надеюсь, это поможет.

Обновление: есть событие для множественного выбора при его открытии. Если вы посмотрите на этот JSFiddle, я закрыл другой выбор, когда он вызывается: http://jsfiddle.net/k8DWK/ .

person Gary Stevens    schedule 03.03.2013
comment
Я пробовал это, но, к сожалению, это не закрывает элемент с параметрами - person Chaya Cooper; 03.03.2013
comment
У вас есть пример JSFiddle, который я могу увидеть? Может быть, так проще отлаживать. - person Gary Stevens; 03.03.2013
comment
Я только что создал его :-) jsfiddle.net/chayacooper/ezxSF/4 Чтобы увидеть проблема в действии, щелкните, чтобы открыть элемент с надписью «Элемент UL», а затем щелкните «Элемент MultiSelect» (не наводя курсор мыши ни на один из элементов в «Элементе UL»). Если вы нажмете на документ или на другой элемент, вы увидите, что он работает так, как ожидалось. - person Chaya Cooper; 03.03.2013
comment
Спасибо. Я обновил исходный ответ. Надеюсь, это рабочее решение. - person Gary Stevens; 03.03.2013
comment
МОЙ БОГ! Это потрясающе :-D Большое спасибо! - person Chaya Cooper; 03.03.2013