我正尝试在输入表单中使用onchange()调用函数
当我在Chrome中检查控制台时,下面的代码返回:
ReferenceError: changingNow is not defined在野生动物园里,上面写着
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是正确的,我已经尝试过括号,它们在解决这个问题时无关紧要。不管怎样,谢谢你!
发布于 2012-06-28 03:34:01
先生们(女士们??)我们的问题似乎已经解决了。我的问题是,可悲的是,<script type="text/javascript">省略了“文本”。
尽管如此,还是有解决方案的。看起来()是安全的,但我要感谢Chris的出色回答,实际上他关于getelementbyid的评论是正确的。
你的等等,
发布于 2012-06-28 01:10:13
你的代码中有很多问题。对于初学者来说,获取各种文本字段的值的行是不正确的:
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/
Documentation
document.getElementById on MDN - https://developer.mozilla.org/en/DOM/document.getElementByIdaddEventListener on MDN - https://developer.mozilla.org/en/DOM/element发布于 2012-06-28 00:54:44
可能是在插入<input>字段之后定义了function changingNow(),并且因为不是在<input>上执行它,而是将它赋给onchange (changingNow()和changingNow),所以最终会给它分配一个undefined
https://stackoverflow.com/questions/11231191
复制相似问题