html 形式的基本 onclick 按钮
basic onclick button in a html form
当我在表单中放置一个基本的 onclick 按钮时,它不起作用:(即使使用 type="button")
function action(div) {
var x = document.querySelector(div);
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
<form method="post">
<button type="button" class="trigger" onclick="action('.popup')">click</button>
<div class="popup">
<p>popup</p>
<div>
</form>
但是这个按钮确实有效:
function action(div) {
var x = document.querySelector(div);
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
<form method="post">
</form>
<button type="button" class="trigger" onclick="action('.popup')">click</button>
<div class="popup">
<p>popup</p>
<div>
我可以把它变成表格吗?
表单中按钮的默认行为是将表单提交到服务器(或表单的任何 ACTION 是什么。在您的情况下,它将 post 表单元素提交给相同的 url).该按钮可以使用,但随后页面会立即重新加载,因此您看不到它。
您需要在按钮处理程序中阻止默认操作。您通常可以通过返回 false 来做到这一点,但 preventDefault
更好。在这里,我展示了两者:
<button type="button" class="trigger"
onclick="action(event, '.popup'); return false;">click</button>
js
function action(e, div) {
e.preventDefault();
var x = document.querySelector(div);
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
这里有一个稍微不同的解决方案,也是基于防止默认表单提交的冲动。
我正在使用自定义属性来提高代码的可读性。
document.querySelector('.trigger').addEventListener('click', action);
function action(e) {
e.preventDefault();
var x = document.querySelector(e.target.getAttribute('toggle-data'));
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
<form method="post">
<!-- toggle-data is read on click event and used to toggle a popup -->
<button type="button" toggle-data=".popup" class="trigger">click</button>
<div class="popup">
<p>popup</p>
<div>
</form>
action
不能是任何形式的函数名称。
为您的函数使用其他名称,它将按您预期的方式工作
function myAction(cssRef)
{
document.querySelector(cssRef).classList.toggle('noDisplay')
}
.noDisplay {
display : none;
}
<form method="post">
<button type="button" onclick="myAction('.popup')">click</button>
<div class="popup">
<p>popup</p>
<div>
</form>
当我在表单中放置一个基本的 onclick 按钮时,它不起作用:(即使使用 type="button")
function action(div) {
var x = document.querySelector(div);
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
<form method="post">
<button type="button" class="trigger" onclick="action('.popup')">click</button>
<div class="popup">
<p>popup</p>
<div>
</form>
但是这个按钮确实有效:
function action(div) {
var x = document.querySelector(div);
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
<form method="post">
</form>
<button type="button" class="trigger" onclick="action('.popup')">click</button>
<div class="popup">
<p>popup</p>
<div>
我可以把它变成表格吗?
表单中按钮的默认行为是将表单提交到服务器(或表单的任何 ACTION 是什么。在您的情况下,它将 post 表单元素提交给相同的 url).该按钮可以使用,但随后页面会立即重新加载,因此您看不到它。
您需要在按钮处理程序中阻止默认操作。您通常可以通过返回 false 来做到这一点,但 preventDefault
更好。在这里,我展示了两者:
<button type="button" class="trigger"
onclick="action(event, '.popup'); return false;">click</button>
js
function action(e, div) {
e.preventDefault();
var x = document.querySelector(div);
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
这里有一个稍微不同的解决方案,也是基于防止默认表单提交的冲动。
我正在使用自定义属性来提高代码的可读性。
document.querySelector('.trigger').addEventListener('click', action);
function action(e) {
e.preventDefault();
var x = document.querySelector(e.target.getAttribute('toggle-data'));
if (x.style.display == 'block') {
x.style.display = 'none';
} else {
x.style.display = 'block';
}
}
<form method="post">
<!-- toggle-data is read on click event and used to toggle a popup -->
<button type="button" toggle-data=".popup" class="trigger">click</button>
<div class="popup">
<p>popup</p>
<div>
</form>
action
不能是任何形式的函数名称。
为您的函数使用其他名称,它将按您预期的方式工作
function myAction(cssRef)
{
document.querySelector(cssRef).classList.toggle('noDisplay')
}
.noDisplay {
display : none;
}
<form method="post">
<button type="button" onclick="myAction('.popup')">click</button>
<div class="popup">
<p>popup</p>
<div>
</form>