Получение этой ошибки: объект, ожидаемый в JavaScript на Internet Explorer 8

0

Я нашел код в stackoverflow, который позволяет автоматическое преобразование в Internet Explorer 8 клавиш клавиатуры от азерной клавиатуры до арабских символов, но я получаю сообщение об ошибке, которое я не понял
вот полная ошибка: подробности об ошибках веб-страницы

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Timestamp: Thu, 9 Jan 2014 16:15:04 UTC


Message: Object expected
Line: 78
Char: 1
Code: 0
URI: file:///C:/Documents%20and%20Settings/home$/Bureau/nice%20conversion.html

Ошибка указывает на эту строку кода javascript:

$("#foo").keypress(function(evt) {  

вот полный фрагмент кода:

<html>
<head>
<script>

function transformTypedChar(charStr) {
    return charStr == "a" ? "b" : charStr;
}

function getInputSelection(el) {
    var start = 0, end = 0, normalizedValue, range,
        textInputRange, len, endRange;

    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
        start = el.selectionStart;
        end = el.selectionEnd;
    } else {
        range = document.selection.createRange();

        if (range && range.parentElement() == el) {
            len = el.value.length;
            normalizedValue = el.value.replace(/\r\n/g, "\n");

            // Create a working TextRange that lives only in the input
            textInputRange = el.createTextRange();
            textInputRange.moveToBookmark(range.getBookmark());

            // Check if the start and end of the selection are at the very end
            // of the input, since moveStart/moveEnd doesn't return what we want
            // in those cases
            endRange = el.createTextRange();
            endRange.collapse(false);

            if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
                start = end = len;
            } else {
                start = -textInputRange.moveStart("character", -len);
                start += normalizedValue.slice(0, start).split("\n").length - 1;

                if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
                    end = len;
                } else {
                    end = -textInputRange.moveEnd("character", -len);
                    end += normalizedValue.slice(0, end).split("\n").length - 1;
                }
            }
        }
    }

    return {
        start: start,
        end: end
    };
}

function offsetToRangeCharacterMove(el, offset) {
    return offset - (el.value.slice(0, offset).split("\r\n").length - 1);
}

function setInputSelection(el, startOffset, endOffset) {
    el.focus();
    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
        el.selectionStart = startOffset;
        el.selectionEnd = endOffset;
    } else {
        var range = el.createTextRange();
        var startCharMove = offsetToRangeCharacterMove(el, startOffset);
        range.collapse(true);
        if (startOffset == endOffset) {
            range.move("character", startCharMove);
        } else {
            range.moveEnd("character", offsetToRangeCharacterMove(el, endOffset));
            range.moveStart("character", startCharMove);
        }
        range.select();
    }
}

$("#foo").keypress(function(evt) {
    if (evt.which) {
        var charStr = String.fromCharCode(evt.which);
        var transformedChar = transformTypedChar(charStr);
        if (transformedChar != charStr) {
            var sel = getInputSelection(this), val = this.value;
            this.value = val.slice(0, sel.start) + transformedChar + val.slice(sel.end);

            // Move the caret
            setInputSelection(this, sel.start + 1, sel.start + 1);
            return false;
        }
    }
});
</script>
</head>


<body>
<textarea id="foo" cols="80" rows="8">Type in here and any 'a' will be you type will show up as a 'b'</textarea>

</body>
</html>

Может кто-нибудь, пожалуйста, объясните, в чем проблема?

  • 0
    Я не вижу здесь jQuery, вы не забыли включить jQuery. Кроме того, ваш код не будет работать, потому что вы пытаетесь связать событие до того, как элемент foo существует. Вам необходимо заключить код в $(function(){ // your code }); так что он работает в нужное время.
Теги:
onkeydown
internet-explorer-8

2 ответа

1

Похоже, что вы пропустили включение библиотеки jQuery. Вы использовали функцию jquery, но нигде не упоминали о ней ссылку. Загрузите или включите http://jquery.com/download/ jquery library.

0

Добавьте следующий код чуть ниже вашего <head>.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

Хотя javascript поддерживается во всех браузерах, вы должны связать любые библиотеки, которые вы используете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню