Кто-нибудь знает, если IE «вернуть ложь»? - PullRequest
1 голос
/ 10 ноября 2010

Этот простой тестовый код работает во всех браузерах, кроме IE (протестирован в IE8):

#dBox {
    height:100px;
    width: 230px;   
    overflow-y:auto;    
}

$(function () { 
    $('#s').focus(function(){  
        $(this).after('<ul id="dBox"></ul>');  
        for (i=0;i<10;i++) $('#dBox').append('<li>'+i+'</li>');
    });
    $('#dBox').live('mousedown',function(event) {  
        //event.stopPropagation();  
        //event.preventDefault();  
        //console.log  (event.isDefaultPrevented());  
        //event.stopImmediatePropagation();  
        return false;   
     });  
    $('#s').blur(function () { $('#dBox').remove();  });
});     
<input type="text" id="s"/>

Я перепробовал все варианты из живого фн., Но не повезло.
Вкл event.isDefaultPrevented() он возвращает true, но #dBox он все еще удален.
Я даже пытался связать обычный mousedown внутри фокуса fn.Но тот же результат работает во всех браузерах, но не в IE.
Кто-нибудь знает, что не так?

1 Ответ

0 голосов
/ 10 ноября 2010

Это происходит непосредственно из-за делегирования события с jQuery live () связывание событий с использованием live не привязывает прямой элемент. Вместо этого он прикрепляет обработчик к корневому узлу документа.

Метод .live () может влиять элементы, которые еще не были добавлены в DOM через использование события делегирование: обработчик, связанный с элемент предка отвечает за события, которые вызваны его потомки. Обработчик перешел к .live () никогда не привязывается к элементу; вместо этого .live () связывает специальный обработчик корня дерева DOM. В нашем примере, когда новый элемент при нажатии выполняются следующие шаги:

Если вы хотите сохранить фокус на вводе при нажатии на элемент #dBox, это сработает, и вот demo http://www.jsfiddle.net/WurDE/

Примечание: если вы не хотите сохранять фокус на входе, удалите trigger('focus') из кода.

$(function () {
    $('#s').focus(function(){
        if (!$('#dBox').length) {
          var $dbox = $('<ul id="dBox"></ul>');
          for (i=0;i<10;i++) $dbox.append('<li>'+i+'</li>');
          $(this).after($dbox);
          $dbox.bind("mousedown", function() {
            $('#s').unbind('blur')
          });
          $dbox.bind("mouseup", function() {
            $('#s').bind('blur', function () {
              $('#dBox').remove();  
            }).trigger('focus');
          });
        }
    });

    $('#s').bind('blur', function () {
      $('#dBox').remove();  
    });
});  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...