Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义Javascript未捕获引用错误函数_Javascript_Html - Fatal编程技术网

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

未定义Javascript未捕获引用错误函数,javascript,html,Javascript,Html,检查小提琴以查看故障是否发生 当我向文本框中添加数据(即使我将其保留为空)并尝试单击“添加”时,它不会执行任何操作 打开Chrome和Firefox控制台都会出现相同的错误,它说“changeText2()”没有定义 我怎样才能解决这个问题?我已经多次遇到这个错误,而且大多数情况下都有非常奇怪的解决方法,但我不确定如何避免它,或者我到底做错了什么 似乎删除全局变量声明在大多数情况下都能解决这个问题,但是,在这种情况下我需要它们,我更希望知道为什么会发生这种错误以及如何发生这种错误 非常感谢您的任

检查小提琴以查看故障是否发生

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

打开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;
}
<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>
var list=document.getElementById('deliveryArray');
变量名称=[];
函数changeText2(){
var deliveryIdentification=document.getElementById('deliveryIdentification')。值;
name.push(deliveryIdentification);//只需将新名称添加到数组中;
//数组已更改重新渲染列表
renderList();
}
函数renderList(){
while(list.firstChild){
list.removeChild(list.firstChild);
}
//重新创建每个li

对于JSFiddle中的(var i=0;i,当您将包装设置为“onLoad”或“onDomready”时,您定义的函数仅在该块内定义,外部事件处理程序无法访问

最简单的修复方法是更改:

function something(...)
致:


将换行从
onload
更改为
不换行


定义的函数具有不同的作用域。

如果使用Angular.js,则嵌入HTML中的函数,例如onclick=“function()”或onchange=“function()”。它们将不会注册。您需要在javascript中进行更改事件。例如:

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

将fiddle(左侧菜单)中的包装更改为“No wrap-in head”。@dystroy会导致错误,因为元素还不存在;)这将对您有所帮助……这很有效。更新的fiddle显示它有效。感谢您快速正确的回答。为我工作。认为这是Jquery vs Javascript的错误
$('#exampleBtn').click(function() {
  function();
});