首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript: ReferenceError

Javascript: ReferenceError
EN

Stack Overflow用户
提问于 2012-06-28 00:45:14
回答 4查看 6.2K关注 0票数 2

我正尝试在输入表单中使用onchange()调用函数

当我在Chrome中检查控制台时,下面的代码返回:

代码语言:javascript
复制
ReferenceError: changingNow is not defined

在野生动物园里,上面写着

代码语言:javascript
复制
  ReferenceError: Can't find variable changingNow

代码如下:

代码语言:javascript
复制
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是正确的,我已经尝试过括号,它们在解决这个问题时无关紧要。不管怎样,谢谢你!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-28 03:34:01

先生们(女士们??)我们的问题似乎已经解决了。我的问题是,可悲的是,<script type="text/javascript">省略了“文本”。

尽管如此,还是有解决方案的。看起来()是安全的,但我要感谢Chris的出色回答,实际上他关于getelementbyid的评论是正确的。

你的等等,

票数 0
EN

Stack Overflow用户

发布于 2012-06-28 01:10:13

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

代码语言:javascript
复制
first_name=document.getElementById(first_name);

getElementById需要一个字符串。传递的不是字符串,而是一个尚未定义的名为first_name的变量。要使其成为字符串,请给出一些引号!其次,您没有使用var关键字,这会影响变量的作用域。最后,在纠正了这两个错误之后,您仍然没有得到值,而是得到了元素-- getElementById给了您一个HTMLElementObject。接下来,您尝试将此对象视为一个字符串:

代码语言:javascript
复制
first_name!==""

正如它所说的那样,first_name 等于一个空字符串,因为它不是一个字符串,而是一个对象。把所有这些放在一起,你会想要:

代码语言:javascript
复制
var first_name=document.getElementById('first_name').value;

这将提供id为"first_name“的字符串形式的文本字段的值。

再说,if语句的括号太多了!

代码语言:javascript
复制
if ((first_name!=="")&&(last_name!=="")&&(username!=="")&&(category!="empty"))

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

代码语言:javascript
复制
if (first_name !== "" && last_name !== "" && username !== "" && category!= "empty"){ }

// or my personal preference:

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

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

代码语言:javascript
复制
document.getElementById('first_name').onchange = changingNow;

这只是应用事件的一种方式,see this answer for more info on that

把所有这些放在一起:

代码语言:javascript
复制
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/

Documentation

票数 4
EN

Stack Overflow用户

发布于 2012-06-28 00:54:44

可能是在插入<input>字段之后定义了function changingNow(),并且因为不是在<input>上执行它,而是将它赋给onchange (changingNow()changingNow),所以最终会给它分配一个undefined

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11231191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档