2017-02-11 11 views
0

Вопросов, которые приходят в последней функции, которая служит для редактирования списков по мере необходимостиКнопки, управляемые функциями для создания элементов списка, заполнения их, а затем редактирования. происходят любопытные ошибки. код и комментарии внутри

JSBin Link

код:

// function to edit the desired list item with user input text 
function editAList(){ 
    var list = document.getElementsByTagName("li"); 
    var uList = document.getElementById("List"); 
    var listLength = list.length; // not needed at the moment 
    var listNum = parseInt(prompt("Enter the list number you would like to edit. Any number from 1 to "+listLength))-1; 
    var edit = document.createTextNode(prompt("Enter the new list text")); 
    uList.replaceChild(edit, uList.childNodes[listNum]); 
} 

Выпуска 1:

editAList функция работает ТОЛЬКО для числа 0 [технически 1, потому что у меня есть вычитание, встроенное для пользователя, который не знает, что он начинается с 0] при вводе пользователя для «listNum». Любое другое значение возвращает ошибку 'Uncaught TypeError: Не удалось выполнить' replaceChild 'в' Node ': параметр 2 не имеет типа' Node '.'

Попытки исправить 1:

Пытались «ParseInt» преобразовать в число (несмотря на мое понимание того, что JS является «свободный сценарий» язык, который не нуждается в такого рода форматирования). Вы также попробовали 'document.createTextNode (prompt (...));' а также получил такое же сообщение об ошибке.

Выпуск 2:

Он стирает элемент списка и заменяет только «изменить» текст

Попытки исправить 2:

Пытались положить document.createElement("li") в createTextNode аргументе - привело к печати OBJECT HTML LI Пробовал помещать его до и после метода createTextNode, но сгенерировал ошибку 'i'

Любые идеи?

ответ

1

использование функции редактирования, как:

function editAList(){ 
    var list = document.getElementsByTagName("li"); 
    var uList = document.getElementById("List"); 
    var listLength = list.length; 
    var listNum = parseInt(prompt("Enter the list number you would like to edit. Any number from 1 to "+listLength))-1; 
    var edit = document.createTextNode(prompt("Enter the new list text")); 
    list[listNum].innerHTML=""; 
    list[listNum].appendChild(edit); 
} 
+0

Спасибо, что работали - дал вам ответ кредит. Если вы не возражаете ответить на следующий вопрос. Что такое 'list [listNum] .innerHTML = "";' здесь? Я вижу, что он исправляет проблему, но я недостаточно понимаю JS, чтобы знать, почему. – vampiire

+0

Думать об этом сейчас. Является ли он заменяет текст пробелом, а затем добавляет редактирование в список? – vampiire

+0

@vampiire вы правы, так что отредактированный текст не добавляется к предыдущему. –

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

  • Нет связанных вопросов^_^