разное положение каретки в firefox и IE

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

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

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


person Antua    schedule 18.04.2011    source источник
comment
я думаю, что в IE холст вычитается полосой прокрутки, поэтому вы получаете разницу в 4   -  person ianace    schedule 18.04.2011
comment
проверьте обновленную ссылку jsfiddle.net/BsJ6V/1.   -  person Santosh Linkha    schedule 18.04.2011


Ответы (1)


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

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

ОБНОВЛЕНИЕ

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

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

person Tim Down    schedule 18.04.2011