仅更改事件的属性值

时间:2019-04-30 14:03:00

标签: javascript jquery

我有这个基本形式:

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

是否可以在事件中临时设置属性?

1 个答案:

答案 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,提交表单,然后将属性设置为原始属性。

希望它解决了您的问题!