2014-04-25 11 views
0

현재 나는 사용자가 내 웹 응용 프로그램 콘텐츠 "넘겨"할 수 있도록 다음 코드를 사용사용자가 텍스트 상자에있을 때 javascript 키 업 함수 효과를 방지 하시겠습니까?

$(this).keyup(function(e) { 
    if(e.which == 37) { 
     document.location = $("#prev_button").attr('href'); 
    }else if(e.which == 39) { 
     document.location = $("#next_button").attr('href'); 
    } 
}); 

문제는 그 사용자가 페이지의 상단에있는 검색 형태 인 경우, I 화살표 키가 페이지를 리디렉션하지 않도록하십시오 (대신 텍스트 커서가 텍스트 주위를 이동할 수 있도록 기능이 없으므로 정상적으로 작동해야합니다).

양식 ID는 "searchForm"입니다. - 검색 양식을 선택하면 false로 평가되는 if 문에 절을 추가 할 수 있습니까?

+0

예, 우리는 요소의'focus'을 확인 할 수 있습니다. 예를 들어 jQuery에서 : if ($ ("# myEle"). is (": focus")) return false; '. –

답변

1

내가 사용하는 것이 뭔가 같은 : Demo

$(this).keyup(function(e) { 
    if(~['input', 'textarea'].indexOf(e.target.tagName.toLowerCase())) return; 
    if(e.which == 37) { 
     document.location = $("#prev_button").attr('href'); 
    }else if(e.which == 39) { 
     document.location = $("#next_button").attr('href'); 
    } 
}); 

이렇게하면 <input><textarea> 요소를 모두 제외 할 수 있습니다.

IMO (단 #searchbox 제외)는 나중에 id을 변경하거나 다른 텍스트 필드를 포함 할 수 있지만 제외 스크립트의 변경 사항을 반영해야하기 때문에 훌륭한 해결책은 아닙니다.

+0

이 솔루션은 1 줄의 코드이며 이후에 추가해야하는 모든 양식이 문제를 일으키는 것을 방지합니다. 이 솔루션을 사용하려면이 질문을 읽는 사람에게 조언을 해주십시오. 일반적이고 간결하며 정확합니다. – mgoldwasser

3

이벤트가 다른 핸들러를하지 않도록 당신이 때 텍스트 상자에 이벤트의 전파를 중지 할 수 있습니다

$('#searchbox').keyup(function(e) { 
    e.stopPropagation(); 
}); 
1

체크 아웃이 스레드 : Find if a textbox is currently selected

function checkFocus() { 

    if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") { 

    //Something's selected 

    return true; 

} 

}