2012-08-16 4 views
1

select 요소 (콤보)에서 요소가 포커스를 잃을 때 change 이벤트가 실행됩니다. 화살표 키를 사용하여 콤보가 변경되면 change 이벤트를 실행할 수 있습니까? 사용하는 경우 파이어 폭스 작동으로select 요소의 화살표 키로 이벤트 변경

$('select').live('keyup',function(e) { 
    if ([33, 34, 35, 36, 37, 38, 39, 40].indexOf(e.keyCode) != -1) 
    {     
     ///obj.blur(); 
     obj.change(); 
     ///obj.focus();  
    } 
}); 

하지만

답변

0

화살표 키를 크롬 출시 두 가지 변화는 당신은 change 이벤트와 keyup 이벤트 모두를 발사하고 있습니다 :

나는 모든 콤보에서 라이브를 시도 select 값을 변경하는 키 및 keyup 이벤트가 change 이벤트를 트리거하므로 해당 이벤트는 select 요소의 원래 변경에서 한 번 한 번,의 change 트리거에서 한 번 두 번 발생합니다이벤트.

는 이벤트 originalEvent 또는 유사한 무언가를 확인할 수 있습니다 두 번을 발사 방지하려면,하지만 쉬운 해결책은 두 번 같은 물건을 실행하지 그냥 오랫동안 켜져 플래그를 사용하는 것입니다

var flag=true; 

$('select').on({ 
    keyup: function(e){ 
     flag=false; 
     if ([33, 34, 35, 36, 37, 38, 39, 40].indexOf(e.which) !=-1) $(this).trigger('change'); 
     setTimeout(function() {flag=true}, 200); 
    }, 
    change: function(e) { 
     if (flag) { 
      //do stuff here 
     } 
    } 
}); 

Array.indexOf()는 크로스 브라우저가 아닙니다.

관련 문제