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

时间:2014-05-15 11:14:11

标签: javascript html

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

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

打开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>

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

3 个答案:

答案 0 :(得分:86)

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

最简单的解决方法是改变:

function something(...)

要:

window.something = function(...)

答案 1 :(得分:5)

将包装从&#34; onload&#34; 更改为&#34; No wrap - in <body>&#34;

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

答案 2 :(得分:0)

如果您使用的是Angular.js,则嵌入到HTML中的函数,例如onclick =&#34; function()&#34;或onchange =&#34; function()&#34;。他们不会注册。您需要在javascript中进行更改事件。如:

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