Asyncronos onsubmit处理程序

时间:2019-04-02 08:47:51

标签: javascript async-await

我正在尝试将密码转换为sha1总数,然后再提交。我正在使用crypto.subtle.digest进行转换。由于它返回了承诺,因此我等待着它。问题是,密码提交时未转换。

function buf2hex(buffer) { // buffer is an ArrayBuffer
    return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}

async function onPwSubmit(event) {
    /* Handle password-form-submit-events
     *
     * Replace the entered password with the SHA1-hash of it.
     * Return 'false' to abort form-submission if anything goes wrong.
     * Return 'true' otherwise.
     */
    event.preventDefault();

    let input_password = document.getElementById('{{ form.password.auto_id }}');
    if (!input_password) { // Just in case something goes wrong, add a message.
        alert("Could not hash entered password with SHA1. Please call help.");
        console.log("Is there a form-field with id 'id_password'?");
        // Abort the form-submit by returning false.
        // Must not submit with password not hashed.
        return false;
    }

    let digest = await crypto.subtle.digest("SHA-1", new TextEncoder().encode(input_password.value));

    input_password.value = buf2hex(digest).toUpperCase();

    event.submit()

    return true; // allow form-submit to continue with return true
}

document.querySelector("#passwordform").addEventListener("onsubmit", onPwSubmit)


我希望密码在提交之前会被转换,但是不是。

1 个答案:

答案 0 :(得分:2)

您的处理程序根本没有运行,因为侦听器未正确连接:

document.querySelector("#passwordform").addEventListener("onsubmit", onPwSubmit)

这侦听名为onsubmit的事件,并在事件发生时调用回调。但是没有这样的事件。您想听submit事件,句号:

document.querySelector("#passwordform").addEventListener("submit", onPwSubmit)

仅在使用on向处理程序分配时使用=前缀,例如:

document.querySelector("#passwordform").onsubmit = onPwSubmit

所有其他事件也适用相同的模式(何时使用on,何时不使用)。

您也不能通过事件submit

event.submit()

相反,选择表单,然后在其上调用submit

document.querySelector("#passwordform").submit();

(这不会不会递归调用您附加的submit处理程序,不用担心)