Javascript:ReferenceError

时间:2012-06-27 16:45:14

标签: jquery javascript-events javascript

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

当我在Chrome中查看控制台时,以下代码会返回:

ReferenceError: changingNow is not defined

在safari中,它说

  ReferenceError: Can't find variable 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是正确的,我已经尝试过括号,他们在排序这个问题时是无关紧要的。不管怎样,谢谢!

4 个答案:

答案 0 :(得分:4)

您的代码中存在很多问题。对于初学者,获取各种文本字段值的行不正确:

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;

这只是申请活动的一种方式,see this answer for more info on that

全部放在一起:

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/

<强>文档

答案 1 :(得分:0)

可能是您在插入function changingNow()字段后定义了<input>,并且因为您没有在onchange上执行它,而是将其分配给onchange(changingNow() vs {{ 1}}),你最终将它指定为changingNow

答案 2 :(得分:0)

您可以通过为应用程序提供全局命名空间然后显式调用该方法来解决此问题:

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

然后在你的HTML中:

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

答案 3 :(得分:0)

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

然而,有解决方案。似乎()是nessecary,但我感谢克里斯的优秀答案,而且他对getelementbyid的评论确实是正确的。

你的等等,