Другое положение каретки в firefox и IE

62
7

Чтобы воссоздать проблему, перейдите на http://jsfiddle.net/BsJ6V/ и введите любой символ сразу после тега тега открытия (например, <body>h if вы вводите символ h).


В окне предупреждения появится позиция каретки. Когда вы запустите его в Firefox, позиция каретки составляет 56, когда вы запустите его в IE, это 60. Не могли бы вы рассказать, в чем дело?


ИЗМЕНИТЬ::
ОБНОВЛЕННАЯ СВЯЗЬ.

спросил(а) 2021-01-19T18:25:26+03:00 2 месяца, 3 недели назад
1
Решение
62

Разница заключается в том, что 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/

ответил(а) 2021-01-19T18:25:26+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема