2015-09-17 5 views
2

Я построил калькулятор, в котором пользователь может либо нажимать на кнопки, либо он/она может выбрать переменные из раскрывающегося списка. Вставка с использованием клавиатуры запрещена. Теперь, когда я нажимаю на выделенную кнопку со стрелкой назад, которая была помещена для функции backspace, только символ, присутствующий в правой позиции, удаляется, даже если мой курсор помещается между выражением с помощью мыши. Есть ли способ обхода символа прямо перед позицией, где я помещаю курсор? Я использую ниже условие на левую стрелку мыши:Backspace не работает правильно

formulaText.value = formulaText.value.slice(0, formulaText.value.lastIndexOf("(")); 

enter image description here

+0

Посмотрите на '' Selection' и Range', чтобы получить позицию курсора. – Halcyon

ответ

3

Вы можете использовать selectionStart свойства на input элемента. Дополнительная информация находится на this MDN page. Ниже приведен рабочий пример.

function getCursorPosition(id) { 
 
    return document.getElementById(id).selectionStart; 
 
} 
 

 
function checkCursorPosition() { 
 
    alert(getCursorPosition('testInput')); 
 
} 
 

 
function backspace() { 
 
    var element = document.getElementById('testInput'); 
 
    var cursorPosition = getCursorPosition('testInput'); 
 
    
 
    element.value = element.value.substring(0, cursorPosition - 1) + element.value.substring(cursorPosition); 
 
    element.selectionStart = element.selectionEnd = cursorPosition - 1; 
 
}
<input type="text" id="testInput" value="Example text" /> 
 
<button onclick="checkCursorPosition()">Check Cursor Position</button> 
 
<button onclick="backspace()">Backspace</button>

+0

Я думаю, вам следует использовать selectStart и selectionEnd, чтобы вы могли отменить весь выбор. –

+1

@CharlieWynn. Это правда, весь выбор можно удалить. В этом случае я решил просто удалить один символ, поскольку ОП попросил убрать _character_ непосредственно перед курсором. –

+0

Определенно ничего плохого в вашем решении, все, что он просил –

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