Другое положение каретки в firefox и IE
Чтобы воссоздать проблему, перейдите на http://jsfiddle.net/BsJ6V/ и введите любой символ сразу после тега тега открытия (например, <body>h
if вы вводите символ h).
В окне предупреждения появится позиция каретки. Когда вы запустите его в Firefox, позиция каретки составляет 56, когда вы запустите его в IE, это 60. Не могли бы вы рассказать, в чем дело?
ИЗМЕНИТЬ::
ОБНОВЛЕННАЯ СВЯЗЬ.
Разница заключается в том, что IE подсчитывает каждый разрыв строки в текстовом поле как два символа (CRLF или \r\n
), в то время как Firefox считает его единственным символом LF (\n
).
Ваша функция не получит правильную позицию каретки в IE, если есть ведущие разрывы строк. Чтобы увидеть это, поместите каретку в начале текстового поля в свой первый пример jsFiddle и нажмите несколько раз, чтобы вернуться в одну из пустых строк. Чтобы исправить это, вы можете использовать функцию, которую я опубликовал ранее в Stack Overflow, или если вы предпочитаете подключаемый модуль jQuery, я создал его для работы с textarea выборы: http://code.google.com/p/rangyinputs/
UPDATE
Обратите внимание, что метод jQuery val()
нормализует эту разницу в разрыве строк между браузерами (бесполезно, на мой взгляд, поскольку значение, которое отправляется на сервер, не нормируется), так что разрывы строк всегда \n
. Как мой плагин, так и ваша функция возвращают позицию каретки относительно значения исходного значения textarea, а не нормализованного значения jQuery, поэтому, если вы манипулируете значением с использованием позиции каретки, вам нужно использовать $textarea[0].value
вместо $textarea.val()
.
Вы можете увидеть эту разницу здесь: http://jsfiddle.net/MyR7J/2/
- Вопросы
- Javascript
- Другое положение каретки в firefox и IE