문제

텍스트 필드에 단어를 세고 있으며 일정량의 단어 후에는 기본값을 사용합니다. 그렇지 않으면 기본 명령을 다시 활성화하고 싶습니다.

하다 preventDefault() 반대 기능이 있습니까?

다음은 샘플 코드입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>preventDefault</title>
    <style type="text/css"></style>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(function() {
                var wordNum = 3;
                var input_length;
                $("#max").text("max word(s): " + wordNum);
                $("#test").keypress(function(event) {

                    input_length = $.trim($(this).val())
                            .replace(/\s+/g, " ")
                            .split(' ').length;

                    if (input_length > (wordNum - 1)) {
                        event.preventDefault();
                    } else {
                        return true;
                    }
                });
            });

        </script>
        </head>
        <body>
            <div id="max"></div>
            <textarea id="test" cols="20" rows="5"></textarea>
</body>
</html>

IE에서 작동하는 것 같습니다. 그러나 Firefox는 그것을 좋아하지 않습니다.

도움이 되었습니까?

해결책

나는 당신이 가진 문제는 당신이 삭제 키를 찾고 있지 않다는 것입니다. PreventDefault는 이벤트 핸들러를 모두 취소하지 않습니다. 그러나 코드를 사용하면 필드의 최대 길이를 누르면 삭제 키 프레스가 취소되므로 사용자는 더 이상 문자를 삭제할 수 없습니다.

IE에서 작동하는 이유는 IE가 삭제, 끝, 입력, 탈출, 기능 키, 홈, 삽입, 페이지 업/다운 및 탭을위한 Keypress 이벤트를 발사하지 않기 때문입니다. Safari에서는 삭제의 키 코드가 Keypress 이벤트에서 올바르지 않습니다.

이러한 이유로 나는 두 가지 제안이 있습니다. 먼저, 올바른 키 코드를 얻을 수 있도록 키 다운 이벤트를 대신 사용하십시오.

둘째, 키 코드를 살펴보고 삭제되거나 백 스페이스 인 경우 방지하지 마십시오.

if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
    return false;
} else {
    return true;
}

다른 팁

그렇지 않아야합니다

if maxwords
   preventDefault
else
   return true

트릭을합니까?

간단히 사용하십시오 return true; 이벤트 핸들러 끝에. 그것은 이벤트를 브라우저로 끌어 올릴 것입니다.

그렇게 보이지 않아 https://developer.mozilla.org/en/dom/event 그러나 당신은 그냥 할 수 있습니다 전화하지 마십시오...

$("#delete_button").click(function(e){
            var category = $("#category").val();
            var answer = confirm("Are you sure you would like to delete the " + category + " category?");
            if (!answer)
                e.preventDefault();
        });
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top