这是全新的。我遇到了类似问题的人,读了一堆答案。我尝试了所有提供的解决方案(使用e.stopPropagation,使用e.stopImmediatePropagation,使用id而不是标签...),但没有任何效果。我通过firebase部署了一个html页面。 我直接在html中编写了脚本。这是我的代码:
function onclick(e) {
/*e.stopPropagation() and e.preventDefault() --YIELDD SAME RESULT*/
e.stopImmediatePropagation()
console.log("hello")
}
<h3>Please update your information below</h3>
<form id="login-form" class="reset-form">
<label>Email:</label>
<input name="email" type="email" placeholder="@">
<label>New Password:</label>
<input name="password" type="password">
<label>Confirm Password:</label>
<input name="second-password" type="password">
<button id="submit-button" type="button" onclick="onclick()">Update</button>
</form>
</div>
</body>
所需的行为:点击时,带有ID的按钮会在devtools控制台中记录一条消息。
p.s。我确定我犯了一个基本错误,但我找不到哪个错误。请帮忙!
答案 0 :(得分:1)
onclick
是公共DOM属性的名称。当具有该名称的函数存在于Global范围中时(如您所愿),它实际上成为window
对象的属性,并且可以覆盖Global范围。调用其他回调函数或将其移出Global范围,它将起作用。
此外,您的用例很可能不需要e.stopImmediatePropagation()
。
最后,</body>
之后除了</html>
,什么都不会发生。 <script>
和head
中允许使用body
元素,但在其他地方则不允许。
<h3>Please update your information below</h3>
<form id="login-form" class="reset-form">
<label>Email:</label>
<input name="email" type="email" placeholder="@">
<label>New Password:</label>
<input name="password" type="password">
<label>Confirm Password:</label>
<input name="second-password" type="password">
<button id="submit-button" type="button" onclick="onclick1()">Update</button>
</form>
<script>
function onclick1(e) {
console.log("hello")
}
</script>
现在,由于您只是在学习所有这些内容,因此请确保您以正确的脚下车。糟糕的HTML和JavaScript泛滥成灾,如今仍在使用坏习惯,因为大多数人对此一无所知,因此他们只是复制/粘贴似乎有效的其他人的代码。
首先不要使用内联HTML事件处理程序(onclick
,onmouseover
等)。将JavaScript与HTML分开,并遵循基于现代标准的代码。有many reasons个不使用内联HTML事件处理程序。而是使用.addEventListener()
方法。
接下来,<label>
元素是一种语义元素,它以两种方式之一起作用:
for
属性,该属性的值与
表单字段,它是标签“用于”:
<label for="txtFirstName">First Name:</label>
<input id="txtFirstName">
<label>First Name: <input id="txtFirstName"></label>
无论哪种情况,您都在告诉客户端label
与它作为标签的表单字段之间存在关系。这允许用户单击或触摸标签并激活表单字段。对于那些依靠辅助技术(例如屏幕阅读器)来使用网络的人来说,这也非常有帮助。
因此,将所有这些放在一起,重新编写的代码将如下所示(我仅添加了一些CSS来使页面看起来更整洁,但这不是必需的):
label { display:block; width:200px; margin-bottom:.5em; }
button { margin-top: 1em; font-size:1.2em; padding:5px; }
<h3>Please update your information below</h3>
<form id="login-form" class="reset-form">
<label>Email: <input name="email" type="email" placeholder="@"></label>
<label>New Password: <input name="password" type="password"></label>
<label>Confirm Password: <input name="second-password" type="password"></label>
<button id="submit-button" type="button">Update</button>
</form>
<script>
// get a reference to the DOM element you want to work with
let btn = document.getElementById("submit-button");
// configure the event handler in JavaScript, not in HTML
btn.addEventListener("click", logToConsole);
// give your functions meaningful names
function logToConsole(e) {
console.log("hello")
}
</script>
答案 1 :(得分:0)
<button id="submit-button" type="button"
onclick="onclick()">Update</button>
导致无限循环。您将覆盖onclick
方法,该方法基本上使您的代码无限制地显示为“当我单击时,请单击我”。
将function onclick()
的名称更改为其他名称,例如function hello()
,它将起作用。
这是一个可以工作的码本。 https://codepen.io/anon/pen/mzajGd
答案 2 :(得分:0)
我认为最好更改您停止的事件,这似乎是表单提交。不确定为什么会遇到范围问题,但这应该可以解决。
<!DOCTYPE html>
<html>
<body>
<form id="login-form" class="reset-form" >
<label>Email:</label>
<input name="email" type="email" placeholder="@">
<label>New Password:</label>
<input name="password" type="password">
<label>Confirm Password:</label>
<input name="second-password" type="password">
<input type="submit">Update</button>
</form>
<script>
document.getElementById("login-form").addEventListener("submit", function(event){
event.preventDefault();
alert('boogy');
});
</script>
</body>
</html>
答案 3 :(得分:-2)
您好,史蒂夫,欢迎来到Stack Overflow。
首先放置您的Button,有几种方法可以完成此操作:
<button class="ui-btn" id="cmdHello">Push Me</button>
<a href="#" class="ui-btn" id="cmdHello2">Yet another Button</a>
现在对它的Click事件做出反应:
<script type="application/javascript">
$(document).bind("pageinit", function() {
$(document).on("click", "#cmdHello", function(evt) {
console.log("Hello World");
});
});
</script>
应该可以解决问题。