Javascript:引用错误

u0sqgete  于 2022-11-20  发布在  Java
关注(0)|答案(4)|浏览(173)

我试图在输入表单中调用一个带有onchange()的函数。
当我在Chrome中检查控制台时,下面的代码返回:
参考错误:未定义changingNow
在《游猎》中,它说:
参考错误:找不到变量changingNow
代码如下:

function changingNow() {
 first_name=document.getElementById(first_name);
 last_name=document.getElementById(last_name);
 username=document.getElementById(username);
 category=document.getElementById(category);
 if ((first_name!=="")&&(last_name!=="")&&(username!=="")&&(category!="empty")) {
   form1.process.disabled = false;
 }
 else {
  form1.process.disabled = true;
 }

 document.getElementById('tweet').value = 'I just voted for '+first_name+' '+last_name+'('+username+')'+'in the '+category+' category!';
 }

 First Name<input type="text" name="first_name" id="first_name" class="first_name" maxlength="50" onchange="changingNow"/><br/>

搜索一下这似乎表明jQuery是负责的,但是页面上没有jQuery。
编辑
Rob W是对的,我已经试过括号了,它们在排序这个问题时是无关紧要的。

hmtdttj4

hmtdttj41#

你的代码中有很多问题。对于初学者来说,你获取各种文本字段值的行是不正确的:

first_name=document.getElementById(first_name);

getElementById需要一个字符串。您传递的不是字符串,而是一个名为first_name的尚未定义的变量。要使其成为字符串,请给予引号!其次,您没有使用var关键字,这会影响变量的作用域。最后,更正了这两个错误后,您仍然无法获得值。你会得到一个元素--getElementById给你一个HTMLElementObject

first_name!==""

就目前的情况而言,first_name绝不会等于空字符串,因为它不是字符串,而是一个对象。将所有这些放在一起,您需要的是:

var first_name=document.getElementById('first_name').value;

这将以字符串形式给予ID为“first_name”的文本字段的值。
更进一步,你的if语句有太多的括号!

if ((first_name!=="")&&(last_name!=="")&&(username!=="")&&(category!="empty"))

这些括号不是必需的,而是:

if (first_name !== "" && last_name !== "" && username !== "" && category!= "empty"){ }

// or my personal preference:

if (
     first_name !== "" &&
     last_name !== "" &&
     username !== "" &&
     category!= "empty"
){ }

最后,我建议删除内联的onchange事件,并将其替换为javascript赋值:

document.getElementById('first_name').onchange = changingNow;

这只是应用事件的一种方法,有关详细信息,请参阅此答案。
总结一下:

var changingNow = function() {
    var first_name = document.getElementById('first_name').value;
    var last_name = document.getElementById('last_name').value;
    var username = document.getElementById('username').value;
    var category = document.getElementById('category').value;
    var form1 = document.getElementById('form1');
     if (
         first_name !== "" &&
         last_name !== "" &&
         username !== "" &&
         category!= "please choose a category"
    ){
        // this line of code is not valid in regular JS...
        //form1.process.disabled = false;
        document.getElementById('tweet').value = 'I just voted for '+first_name+' '+last_name+' ('+username+')'+' in the '+category+' category!';
    } else {
        // this line of code is not valid in regular JS...
         //form1.process.disabled = true;
        document.getElementById('tweet').value = 'please complete the fields above!';
    }
}
document.getElementById('first_name').onchange = changingNow;
document.getElementById('last_name').onchange = changingNow;
document.getElementById('username').onchange = changingNow;
document.getElementById('category').onchange = changingNow;
changingNow();

请在此处试用:http://jsfiddle.net/yzbWr/

文件

6uxekuva

6uxekuva2#

可能是在插入<input>字段之后定义了function changingNow(),并且由于您没有在onchange上执行它,而是将其赋值给onchange(changingNow()changingNow),因此最终将其赋值为undefined

j13ufse2

j13ufse23#

您可以通过为应用提供一个全局命名空间,然后显式调用该方法来修复此问题:

window.myApp = {};
window.myApp.changingNow = function(){
    // your function code here
};

然后在HTML中:

<input type="text" ... onchange="window.myApp.changingNow">
ohtdti5x

ohtdti5x4#

先生们(和女士们??)我们的问题似乎已经解决了。我的问题是,可悲的是,<script type="text/javascript">省略了“文本”。
尽管如此,还是有解决方案的。看起来()是nessecary,但我感谢Chris的出色回答,确实他关于getelementbyid的评论是正确的。
你的等等,

相关问题