我有这个基本形式:
jQuery(document).ready(function($) {
$('#btn').click(function() {
var form = document.getElementById('form');
form.setAttribute('action', 'export.php');
form.submit()
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="get.php" id="form">
<div>
<label for="date">From</label>
<input type="date" name="from-date" id="date" />
</div>
<div>
<label for="date">To</label>
<input type="date" name="to-date" id="date" />
</div>
<div>
<input type="checkbox" name="flags[new]" /> New
<input type="checkbox" name="flags[updated]" /> Updated
<input type="checkbox" name="flags[existing]" /> Existing
</div>
<div>
<input type="submit" />
</div>
<div>
<button type="button" id="btn">
<span>Export</span>
</button>
</div>
</form>
这工作(预期)。但是,然后我单击了提交输入,它尝试转到export.php
。由于某种原因,我的大脑告诉我这是不正确的行为,但是我知道我已经更改了DOM中的属性值,因此,单击导出按钮后进行的任何操作都将呈现该属性值(直到刷新)。
我知道我可以做另一个事件处理程序来重置属性值,但是我觉得这是违反直觉的,JS / jQuery中是否有某些东西可以让我仅“切换”事件的属性?还是我必须进行硬重置?
TL; DR
是否可以在事件中临时设置属性?
答案 0 :(得分:1)
尝试这样的事情:
jQuery(document).ready(function($) {
$('#btn').click(function() {
let form = document.getElementById('form');
//Save the current attr
let currentAttr = form.getAttribute('action');
form.setAttribute('action', 'export.php');
form.submit();
//Reset the previous attr
form.setAttribute('action', currentAttr);
})
})
您实际上保存了当前的attr,提交表单,然后将属性设置为原始属性。
希望它解决了您的问题!