我试图在输入表单中调用一个带有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是对的,我已经试过括号了,它们在排序这个问题时是无关紧要的。
4条答案
按热度按时间hmtdttj41#
你的代码中有很多问题。对于初学者来说,你获取各种文本字段值的行是不正确的:
getElementById
需要一个字符串。您传递的不是字符串,而是一个名为first_name
的尚未定义的变量。要使其成为字符串,请给予引号!其次,您没有使用var
关键字,这会影响变量的作用域。最后,更正了这两个错误后,您仍然无法获得值。你会得到一个元素--getElementById
给你一个HTMLElementObject
。就目前的情况而言,first_name绝不会等于空字符串,因为它不是字符串,而是一个对象。将所有这些放在一起,您需要的是:
这将以字符串形式给予ID为“first_name”的文本字段的值。
更进一步,你的if语句有太多的括号!
这些括号不是必需的,而是:
最后,我建议删除内联的
onchange
事件,并将其替换为javascript赋值:这只是应用事件的一种方法,有关详细信息,请参阅此答案。
总结一下:
请在此处试用:http://jsfiddle.net/yzbWr/
文件
document.getElementById
-https://developer.mozilla.org/en/DOM/document.getElementByIdaddEventListener
-https://developer.mozilla.org/en/DOM/element6uxekuva2#
可能是在插入
<input>
字段之后定义了function changingNow()
,并且由于您没有在onchange上执行它,而是将其赋值给onchange(changingNow()
与changingNow
),因此最终将其赋值为undefined
j13ufse23#
您可以通过为应用提供一个全局命名空间,然后显式调用该方法来修复此问题:
然后在HTML中:
ohtdti5x4#
先生们(和女士们??)我们的问题似乎已经解决了。我的问题是,可悲的是,
<script type="text/javascript">
省略了“文本”。尽管如此,还是有解决方案的。看起来()是nessecary,但我感谢Chris的出色回答,确实他关于getelementbyid的评论是正确的。
你的等等,