2015-07-18 3 views
1

Как я могу узнать, произошло ли событие фокуса из-за ввода нажмите = отправить форму или просто из-за щелчка? Данные события, которое идет на консоль типа «focusout» и не имеет никакой относящейся к делу информацииjquery focusout == submit

$(".clientrow[clientid="+clientid+"] td."+fieldname+"").bind("focusout", function(event){ 
    console.log(event); 
    setTimeout(function() { 
     if (!event.delegateTarget.contains(document.activeElement)) { 
      $(".clientrow[clientid="+clientid+"] td."+fieldname+"").html( 
        $(".clientrow[clientid="+clientid+"] td."+fieldname+" input[type=text]").val() 
       ); 
      } 
     }, 0); 
    }); 
+0

Невозможно сказать __why__ событие фокуса (официально известное как событие размытия). Возможно, вы сможете прослушать предыдущие события, такие как «щелчок» или «отправить», зацепить свою функцию обратного вызова в этой точке и отменить последующее событие «размытия». Может быть. – kieranpotts

+0

Вы пробовали что-то подобное, как директива 'ng-blur' –

+0

@KieranPotts [' blur'] (http://www.w3.org/TR/DOM-Level-3-Events/#event-type-blur) и ['focusout'] (http://www.w3.org/TR/DOM-Level-3-Events/#event-type-focusout) - это разные события, как стандартные. – Oriol

ответ

0

Edit: Как Ориоль указала в комментариях, это не будет работать в Mozilla. Если вы ищете только браузеры webkit, вы можете попробовать этот подход. Но в качестве общего решения попробуйте привязать событие к кнопке отправки и последовательно установить флаг, который идентифицирует элемент. На основе этого элемента вы можете определить, действительно ли оно размыто или нет.

Вы можете посмотреть relatedTarget недвижимость в event.

Демо: http://jsfiddle.net/GCu2D/782/

JS:

$(document).ready(function() { 
    $("input").on("blur", function (e) { 
     console.log(e); 
     if (e.relatedTarget) { 
      console.log("Because of button"); 
     } else { 
      console.log("Just a blur") 
     } 
    }); 
}); 

HTML:

<form> 
    <input type="text" /> 
    <button type="button">Submit</button> 
</form> 

Вы должны заменить focusout с blur событием. Когда размытие связано с нажатием кнопки, связанное свойство Target будет иметь значение button в качестве значения, но в других случаях оно будет равно нулю.

+0

Выглядит интересно, я проверю его через секунду. –

+0

В Firefox я всегда получаю «Просто размытие». – Oriol

+0

В Chrome, мне тоже –

Смежные вопросы