繁体   English   中英

Javascript / Typescript-防止表单在提交时重置

[英]Javascript/Typescript - Prevent form from resetting on submit

我有一个简单的打字稿类,想在提交时显示输入结果。 即使已经问过这个问题, event.preventDefault()也不起作用。 也许您可以给我一些提示?

class LoginPanel {

    public appDiv: HTMLElement = document.getElementById('app');

    constructor() {
        this.setForm();
        let btn = document.getElementById('loginButton');
        btn.addEventListener('submit', (event) => {event.preventDefault(); this.submitForm()});
    }

    public setForm(): void {
        this.appDiv.innerHTML = `<form id="loginForm" class="form-signin mt-5">
      <div class="text-center">
      <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
      </div>
      <label for="inputEmail" class="sr-only">Email address</label>
      <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="">
      <label for="inputPassword" class="sr-only">Password</label>
      <input type="password" id="inputPassword" class="form-control mt-1" placeholder="Password" required="">
      <button id="loginButton" class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>
    `;
    }

    public submitForm(): void {
        const elementFirst: HTMLElement = document.createElement('pre');
        const elementSecond: HTMLElement = document.createElement('pre');

        elementFirst.innerHTML = 'email: ' + document.getElementById('loginForm')[0].value;
        document.getElementById('loginForm').appendChild(elementFirst);

        elementSecond.innerHTML = 'password: ' + document.getElementById('loginForm')[1].value;
        document.getElementById('loginForm').appendChild(elementSecond);
    }

}

new LoginPanel();

提交表单时,不仅要提交一个按钮,还要提交其所有值。

因此,防止默认设置的正确位置在form元素本身内,而不是其按钮内。

constructor() {
    this.setForm();
    const form = document.getElementById('loginForm');
    form.addEventListener('submit', (event) => {event.preventDefault(); this.submitForm()});
}

您可以看到在此CodePen中可以使用

您可以在表单上使用onsubmit="return false"代替:

<form id="loginForm" class="form-signin mt-5" onsubmit="return false">
  <div class="text-center">
  <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
  </div>
  <label for="inputEmail" class="sr-only">Email address</label>
  <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="">
  <label for="inputPassword" class="sr-only">Password</label>
  <input type="password" id="inputPassword" class="form-control mt-1" placeholder="Password" required="">
  <button id="loginButton" class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>

有什么不同?

区别在于返回false;否则返回false。 使事情更进一步,因为它还可以防止该事件传播(或“冒泡”)DOM。 您可能不知道的是,每当元素上发生事件时,该事件也会在每个父元素上触发。

另外,您可以在form元素上使用event.stopPropagation

constructor() {
  this.setForm();
  let btn = document.getElementById('loginButton');
  btn.addEventListener('click', (event) => { this.submitForm()});
  let form = document.getElementById('loginForm');
  form.addEventListener('submit', (event) => { event.preventDefault(); event.stopPropagation; });
}

请参阅: e.preventDefault()和有什么区别? 并返回假?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM