Подтвердить что ты не робот

Ошибка Javascript Uncaught Reference не определена

Проверьте скрипт, чтобы увидеть произошедший сбой.

Когда я добавляю данные (даже если я оставлю их пустыми) в текстовое поле и попытаюсь нажать "Добавить", он ничего не сделает.

Открытие консоли Chrome и Firefox дает мне ту же ошибку, что "changeText2()" не определен.

Как я могу это исправить? Я несколько раз сталкивался с этой ошибкой, и в основном у нее были очень странные обходные пути, но я не уверен в том, как избежать этого или что я даже делаю неправильно.

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

Приветствуется всяческая помощь.

JavaScript:

var list = document.getElementById('deliveryIdArray');
var names = [];

function changeText2() {
    var deliveryIdentification = document.getElementById('deliveryIdentification').value;
    names.push(deliveryIdentification);//simply add new name to array;
    //array changed re-render list
    renderList();
}

function renderList(){
    while (list.firstChild) {
        list.removeChild(list.firstChild);
    }
    //create each li again
    for(var i=0;i<names.length;i++){
        var entry = document.createElement('li');
        entry.appendChild(document.createTextNode(names[i]));
        var removeButton = document.createElement('button');
        removeButton.appendChild(document.createTextNode("remove"));
        removeButton.setAttribute('onClick','removeName('+i+')');
        entry.appendChild(removeButton);
        list.appendChild(entry);
    }
}


function removeName(nameindex){
    names.splice(nameindex,1);
    //array changed re-render list
    renderList();
}

function getDeliveries(){
    return names;
}

HTML:

<b>Number(s): </b>
    <input id = "deliveryIdentification" name = "deliveryIdentification" type = "text" size = "16" maxlength = "30">

    <!-- Array Area Creation -->
    <input type='button' onclick='changeText2()' value='Add' />

    <ol id="deliveryIdArray">
    </ol>

Fiddle: http://jsfiddle.net/vSHQD/

4b9b3361

Ответ 1

В JSFiddle, когда вы устанавливаете перенос на "onLoad" или "onDomready", функции, которые вы определяете, определяются только внутри этого блока и не могут быть доступны внешними обработчиками событий.

Самое простое исправление:

function something(...)

To:

window.something = function(...)

Ответ 2

Измените обертку с "onload" на "No wrap - in <body>"

Определенная функция имеет другую область.

Ответ 3

Если вы используете Angular.js, тогда функции внедряются в HTML, например onclick = "function()" или onchange = "function()". Они не будут регистрироваться. Вам нужно внести изменения в javascript. Например:

$('#exampleBtn').click(function() {
  function();
});