![](/img/trans.png)
[英]HTML5/JavaScript/PhoneGap onclick does not function as expected
[英]onClick / onclick does not seem to be working as expected in HTML5 / JavaScript
我正在尝试做一些非常简单的事情 - 单击一个按钮时调用一个函数。 我在网上看过几个例子,比如W3Schools和(我相信)我正在使用onclick / onClick,它似乎没有正常运行。 我尝试了几种不同的方法 - 我真的不确定我做错了什么。
方法1
HTML
<button id="buttonAdd" onclick="add()">Add</button>
JavaScript的
function add() {
console.log("Test");
}
结果:
测试
单击该按钮时,它在console.log中闪烁的速度比我容易看到的速度快,然后消失。
方法2
HTML
<button id="add">Add</button>
JavaScript的
window.onload = function() {
document.getElementById("add").onclick = add;
}
function add() {
console.log("Test");
}
结果
测试
单击该按钮时,它在console.log中闪烁的速度比我容易看到的速度快,然后消失。
方法3
HTML
<button id="add">Add</button>
JavaScript的
window.onload = function() {
document.getElementById("add").onclick = add();
}
function add() {
console.log("Test");
}
结果
测试
这将出现在控制台日志中并保持不变,没有单击该按钮。
问题
我一般都感到困惑。 据我所知,我正在做的例子(我尝试过的不同方法反映了例子中的差异)。
谢谢。
编辑
所以似乎问题是console.log闪烁的速度几乎比我看到的要快......有没有人知道为什么会这样? 看起来页面本身就令人耳目一新,但我不知道为什么会这样......
回答
该按钮的形式使页面在单击时刷新。
问题是你的功能名称。 它与元素的id相同。 尝试编写这个console.log(add)
。 您将看到它记录DOM节点而不是函数。
是表单中的按钮? 因为如果是这样,那么表单就会被提交,这就是页面刷新的原因。 你可以在测试中发布一个jsfiddle吗?
我需要更多地看一下你的html结构,但是听起来好像在方法1中,函数没有以范围内的方式正确声明。 这可能与名称相同,如布莱恩所提到的,或者可能是由其他一些问题引起的。
编辑:从您对theBrain的回复中,如果您使用不同的名称,听起来您可以让方法1工作。 鉴于此,您还可以通过更改onclick来阻止页面发布,以包含返回false值。 以下任何一种都可以使用:
<button id="buttonAdd" onclick="add(); return false;">Add</button>
要么
<button id="buttonAdd" onclick="return add();">Add</button>
再加上return false;
作为add()
函数代码的最后一行。
在任何一种情况下,方法2都是实现这一点的更好方法,因此我们可以忽略方法1失败的原因(虽然函数与按钮元素的名称明显不同,肯定是一个好习惯;个人而言,我的前言所有我的按钮ID都带有'btn_')。
在两种方法中超级快速清除控制台的可能原因是您没有为按钮声明type
。 在没有类型的情况下,不同的浏览器会以不同的方式执行操作(请参阅W3Schools按钮标记上的提示),这听起来像是您将其视为提交按钮,这意味着它在单击时会回发到页面。 您应该能够通过在button元素的属性中指定type='button'
来防止此行为。
最后,方法3提供了它的行为,因为你的赋值语句也在执行对add()
函数的调用。
单击该按钮时,它在console.log中闪烁的速度比我容易看到的速度快,然后消失。
这是可疑的 - 如果没有用户交互,通常不会清除控制台输出。
可能是你的页面被重新加载 - 因此控制台输出“消失”了吗?
一般来说,你不应该再使用这种“老派”事件处理(除非它是针对非常小规模的事情)。
看看像jQuery等的popuplar JS库 - 它们简化了事件处理(以及其他事情)。
虽然我从@TheBrain的回答中得到了帮助,但我有点不同。 我的javascript方法的名称是submit()
,它实际上是在提交我的表单。 当我将方法的名称更改为submitForm()
,它工作。
我认为之前的submit()
是内部调用Javascript Form
的submit()
而不是我的javascript方法。
更正邀请。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.