2010-07-03 4 views
0

У меня есть эти два кода -Проблемы с двумя кодами JavaScript

new function($) { 
$.fn.getCursorPosition = function() { 
var pos = 0; 
var el = $(this).get(0); 
// IE Support 
if (document.selection) { 
    el.focus(); 
    var Sel = document.selection.createRange(); 
    var SelLength = document.selection.createRange().text.length; 
    Sel.moveStart('character', -el.value.length); 
    pos = Sel.text.length - SelLength; 
} 
// Firefox support 
else if (el.selectionStart || el.selectionStart == '0') 
    pos = el.selectionStart; 

return pos; 
} 
} (jQuery); 

И

var element = document.getElementById('txtarr'); 
if(document.selection){ 
     // The current selection 
    var range = document.selection.createRange(); 
     // We'll use this as a 'dummy' 
    var stored_range = range.duplicate(); 
     // Select all text 
    stored_range.moveToElementText(element); 
     // Now move 'dummy' end point to end point of original range 
    stored_range.setEndPoint('EndToEnd', range); 
     // Now we can calculate start and end points 
    element.selectionStart = stored_range.text.length - range.text.length; 
    element.selectionEnd = element.selectionStart + range.text.length; 
} 

Первая для получения позиции курсора в текстовом поле, а вторая для определения конца текстового поля, но они дают тот же результат? Где ошибка?

+2

Просьба описать случай реального мира, в котором содержится текстовое поле, каков ожидаемый результат, каков фактический результат и где вы используете функции, используя какое событие (с). –

+0

Я использую функции при нажатии backspace. Вторая функция возвращает число, которое показывает, где заканчивается textarea. Первая функция должна возвращаться туда, где позиция каретки находится в текстовом поле. Но две функции возвращают один и тот же результат (например, первые возвраты 37, а вторая возвращает 37, что, поскольку число - это конец текстового поля). – lam3r4370

ответ

0

Я исправлю это. Это очень просто :). Я просто заменяю второй код (для определения конца текстового поля) с помощью: $("#txtarr").val().length (jQuery). #txtarr - это идентификатор моего текстового поля.

+0

Это не то, что делает второй кусок кода. –

+0

Но это то, что я думал и хотел сделать вторую пьесу. – lam3r4370

+1

ОК. В этом случае все, что вам нужно для этого, - document.getElementById ('txtarr'). Value.length' –

1

Оба фрагмента кода делают одно и то же несколько разными способами. Каждый пытается получить позицию каретки или выделения в текстовом поле (или текстовом вводе), хотя первый получает только начальную позицию выбора, а второй получает начальную и конечную позиции.

Оба имеет слоеные выводы: первый предполагает браузер отличая document.selection будет поддерживать TextRange, в то время как вторые делают тот же вывод, плюс еще что предполагает браузер без поддержки document.selection будет иметь поддержку selectionStart и selectionEnd свойств прокручиваемых. Ни один из них не будет правильно обрабатывать разрывы строк в IE. Для кода, который это делает, см. Мой ответ здесь: How to get the start and end points of selection in text area?

Смежные вопросы