提交事件 preventDefault() 不适用于 os9 iPad/iPhone

submit event preventDefault() not working on iPad/iPhone with os9

我有一个简单的表格来收集一个人的详细信息。它将数据发送到 firebase,我 e.preventDefault() 阻止它正常提交。这是处理程序;

let frm = document.forms[0];
frm.addEventListener('submit', function(e) {
    e.preventDefault();
    let formData = document.signup.elements;
    formValues = getFormInfo(formData);
    let submitted = writePupilRecord(formValues);
    console.log(submitted);
    removeForm();
    formResponse();
    return false;
});

这是一个难以理解的问题。它适用于 Chrome、Safari、Firefox、android、最新 iPhone/iPad。它不适用于旧的 ios 浏览器。 当我在本地使用 firebase 服务器尝试使用 firebase SDK 时,我可以在控制台中看到 GET 请求,当我导航到 localhost 时,在工作的浏览器上,当我提交表单时,没有 HTTP 请求,正如你所期望的,因为我有 preventDefault()ed。但是当我使用 XCode 模拟器和 ios9 执行此操作时,会向服务器发出第二个请求,包括提交的数据,就好像没有调用 preventDefault() 方法一样。 查找我的问题时,我遇到了将 return false; 添加到回调函数的建议,但这没有任何区别。 为什么 e.preventDefault() 不能只在稍旧的 iPad/iPhone 上工作,我该怎么做才能让它工作?我首先使用 javascript 构建表单,这在旧的 ios.

中仍然有效

It doesn't work in older osx browsers.

您正在使用 let,它是在 ES2015 中引入的(又名 "ES6")。这是旧浏览器中的语法错误。如果您不处理最新的浏览器,请将其切换为 var(在该代码中,它没有显着差异)。


我意识到这可能有一个 dupetarget,而且 there is, but the answers are out of date. I've added one 这是最新的。