разные каретки в Firefox и IE - PullRequest
       26

разные каретки в Firefox и IE

1 голос
/ 18 апреля 2011

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

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

EDIT :: ОБНОВЛЕННАЯ ССЫЛКА .

1 Ответ

1 голос
/ 18 апреля 2011

Разница в том, что IE считает каждый разрыв строки в текстовой области как два символа (CRLF или \r\n), в то время как Firefox считает его как один символ LF (\n).

Ваша функция не получит правильную позицию каретки в IE, если есть разрывы в начале строки. Чтобы увидеть это, поместите курсор в начало текстовой области в вашем первом примере с jsFiddle и несколько раз нажмите клавишу возврата и попробуйте ввести одну из пустых строк. Чтобы это исправить, вы можете использовать функцию, которую я ранее публиковал в Stack Overflow или, если вы предпочитаете плагин jQuery, я создал его для работы с выборками textarea: http://code.google.com/p/rangyinputs/

UPDATE

Обратите внимание, что метод jQuery val() нормализует эту разницу в разрывах строк между браузерами (на мой взгляд, бесполезно, поскольку значение, отправляемое на сервер, не нормализуется), поэтому разрывы строк всегда равны \n. И мой плагин, и ваша функция возвращают позицию каретки относительно свойства необработанного значения текстовой области, а не нормализованного значения jQuery, поэтому, если вы манипулируете значением с помощью позиции каретки, вам нужно использовать $textarea[0].value вместо $textarea.val().

Вы можете увидеть эту разницу здесь: http://jsfiddle.net/MyR7J/2/

...