Подтвердить что ты не робот

JQuery - обнаружение, когда пользователь нажимает OUT из типа ввода Текстовое поле

Я хочу определить, когда пользователь нажимает OUT из типа ввода Text Field, а не внутри.

Здесь то, что у меня есть, но оба события стреляют по щелчку внутри (фокус):

<input id="title" val="hello" />

$("#title").focusout(function() {
    console.log('inside');
}).blur(function() {
    console.log('outside');
});
4b9b3361

Ответ 1

Вы можете связать события focus и blur следующим образом:

<input id="title" val="hello" type="text" />

$("#title").focus(function() {
    console.log('in');
}).blur(function() {
    console.log('out');
});

focusout не требуется, так как он ориентирован на событие пузырьков для дочерних элементов: http://api.jquery.com/focusout/

Ответ 2

Вы можете написать небольшой плагин, например

(function($){
  $.fn.outside = function(ename, cb){
      return this.each(function(){
          var $this = $(this),
              self = this;

          $(document).bind(ename, function tempo(e){
              if(e.target !== self && !$.contains(self, e.target)){
                  cb.apply(self, [e]);
                  if(!self.parentNode) $(document.body).unbind(ename, tempo);
              }
          });
      });
  };
}(jQuery));

.. и используйте его как:

$('#title').outside('click', function(e) {
    console.log('outside');
});

Пример: http://www.jsfiddle.net/tGnun/

Ответ 3

Похоже, что focusout() и blur() запускаются при нажатии за пределами текста. Вместо этого используйте focus(). Проверьте здесь.

Ответ 4

Я не уверен на 100%, что это то, что вы хотите, но вот удар в него:

<html>
<head>
<title>Example</title>
<script src="jquery-1.4.3.js" type="text/javascript"></script>
</head>
<body id="body">
<script>
    $("document").ready( function() 
    {   $("#body").click( function()
        { alert("body"); } );
        $("#input").click( function(event)
        { alert("input"); event.stopPropagation(); } );
    } );
</script>
<h2>input below</h2>
<input id="input" type="text"/>
</body>
</html>