2012-07-31 2 views
1

누군가 두 개의 input 필드 중 하나를 클릭 할 때 백본 이벤트를 트리거하려고합니다. 이것은 바깥 쪽을 클릭하면 올바르게 트리거되지만 다른 필드를 클릭하면 트리거되지 않게하려고합니다.필드 집합에서 포커스 손실시 백본 이벤트 트리거

var ItemView = Backbone.View.extend({ 

    events: { 
    'blur input': 'blurInputs' 
    }, 

    blurInputs: function(){ 
    if ($('input.description').is(":focus") || $('input.amount').is(":focus")){ 
     // do nothing 
    } else { 
     // do something 
    } 
    } 

}); 
+1

흐림 이벤트를 확인하는 대신 클릭 이벤트를 듣습니까? – Jlange

+0

아직 작동하지 않았지만 실제로 작동 할 수도 있지만 구현하기가 훨씬 더 지저분합니다. 그 입력 중 하나를 제외하고 아무 곳이나 클릭하면 ... – brittohalloran

+0

하나의 아이디어는 두 개의 입력 이외의 모든 것보다 높은 Z- 색인으로 페이지에 투명 div를 추가하거나 다른 요소를 신경 쓰면됩니다. 그 하나의 div에 대한 클릭 듣기. 사용자가 클릭 할 때이를 숨길 수 있으며 입력이 포커스를 얻었을 때이를 표시 할 수 있습니다. – Jlange

답변

3

다른 입력 상자가 포커스를 받기 전에 blur 이벤트가 발생하기 때문에 문제가 발생한 것 같습니다.

가능한 해킹은 확인하기 전에 입력 상자 이것은 바울의 대답을 기반으로

blurInputs: function() { 
    setTimeout(function() { 
    if (this.$('input.description').is(':focus') || this.$('input.amount').is(':focus')) { 
     // do nothing 
    } else { 
     // do something 
    } 
    }, 50); 
} 
+1

이것은 작동하지만 확실히 해킹 같은 느낌입니다. 그것은 비록 지금해야 할 것입니다. – brittohalloran

0

을 집중 한 경우 몇 밀리 초를 기다려야하는 것입니다하지만 내 사용 사례에 대해 잘 작동

onBlur: function(e) { 
    var self = this; 
    setTimeout(function() { 
     if(self.$el.find('input:focus').length == 0) { 
     console.log("BLUR"); 
     } 
    }, 500); 
    }, 
관련 문제