我有一个简单的表单验证器。当您单击离开输入时,它会显示一条错误消息(必要时(。
然而,我注意到了一个副作用。当错误消息插入到表单中时,它会向下移动提交按钮,从而防止触发提交事件。
看看下面的片段。这个过于简化的例子模拟了这个问题。试着点击输入,然后点击按钮。您会注意到按钮的点击事件不会触发,因为它向下移动。
function insert() {
var button = document.querySelector('button');
document.body.insertBefore(document.createElement('div'), button);
}
div {
width: 100px;
height: 100px;
background-color: red;
}
<input onblur="insert()" />
<button onclick="alert()">Click</button>
我该如何解决这个问题?请记住,对于我的表单验证器,按钮的类型是submit,不会触发的事件是表单的submit事件,但同样的概念显然可以在这里应用。
alert()
未激发的原因是,创建的div
元素在click
事件发生之前插入了blur
事件。然后,当click
事件发生时,它不会向按钮注册,因为按钮在页面上移动了。在下面的示例中,我添加了一个delayInsert
函数来演示这一点。
步骤:
- 单击输入字段
- 单击
Click
按钮
alert()
将在插入div
之前激发。
function delayInsert() {
setTimeout(insert, 1000);
}
function insert() {
var button = document.querySelector('button');
document.body.insertBefore(document.createElement('div'), button);
}
div {
width: 100px;
height: 100px;
background-color: red;
}
<input onblur="delayInsert()" />
<button onclick="alert()">Click</button>
它对我有用。当我编辑txt框时,div会被附加。当我点击按钮时,它会发出警报。尝试使用js获取数据并向php发送xmlHTTPrequest?