Javascript未捕获引用错误函数未定义

Eri*_*ick 27 html javascript

检查小提琴以查看发生的故障.

当我将数据(即使我将其留空)添加到文本框并尝试单击"添加"时,它不会执行任何操作.

打开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;
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

小提琴: http ://jsfiddle.net/vSHQD/

Nie*_*sol 90

在JSFiddle中,当您将包装设置为"onLoad"或"onDomready"时,您定义的函数仅在该块内定义,并且不能由外部事件处理程序访问.

最简单的解决方法是更改​​:

function something(...)
Run Code Online (Sandbox Code Playgroud)

至:

window.something = function(...)
Run Code Online (Sandbox Code Playgroud)

  • 这有效.http://jsfiddle.net/vSHQD/1/更新了小提琴,显示它正常工作.谢谢你快速正确的答案. (2认同)

Sha*_*k D 5

将包装从" onload"更改为" No wrap - in <body>"

定义的函数具有不同的范围.