提交事件 preventDefault() 在 os9 的 iPad/iPhone 上不起作用 [重复]

Posted

技术标签:

【中文标题】提交事件 preventDefault() 在 os9 的 iPad/iPhone 上不起作用 [重复]【英文标题】:submit event preventDefault() not working on iPad/iPhone with os9 [duplicate] 【发布时间】:2017-04-06 16:21:33 【问题描述】:

我有一个简单的表格来收集一个人的详细信息。它将数据发送到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 SDK获得的firebase服务器本地尝试它时,当我导航到localhost时,我可以在控制台中看到GET请求,当我提交表单时,在工作的浏览器上没有HTTP请求,正如你所期望的那样,因为我有preventDefault()ed。但是当我使用带有 ios9 的 XCode 模拟器执行此操作时,会向服务器发出第二个请求,包括提交的数据,就好像没有调用 preventDefault() 方法一样。 查找我的问题时,我遇到了将 return false; 添加到回调函数的建议,但这没有任何区别。 为什么 e.preventDefault() 不能仅在稍旧的 iPad/iPhone 上工作,我该怎么做才能让它工作?我首先使用 javascript 构建表单,这仍然适用于旧版 ios。

【问题讨论】:

查找 ES6 支持 【参考方案1】:

它不适用于旧的 osx 浏览器。

您正在使用let,它是在 ES2015(又名“ES6”)中引入的。这是旧浏览器中的语法错误。如果您不使用最新的浏览器,请将其切换到 var(在该代码中,它不会产生重大影响)。


我意识到这可能是一个欺骗目标,there is,但答案已经过时了。我有added one,这是最新的。

【讨论】:

如果我现在说'是的,我知道'你会相信我吗?这是一个如此小的项目,我忘记了我通常会做的 Babel。谢谢! @leonormes: :-) 轻松完成。有时我必须在没有转译的情况下处理仅限于 ES5 的项目,并且我必须非常小心地引入箭头函数,constlet 等。ESLint 可以提供帮助(尽管听起来像您正在添加 Babel)。

以上是关于提交事件 preventDefault() 在 os9 的 iPad/iPhone 上不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

preventDefault() 方法

js preventDefault() 方法

reactjs preventDefault() 不会阻止表单提交时页面重新加载

深入了解preventDefault与stopPropagation

js事件之event.preventDefault()与event.stopPropagation()用法区别

js 阻止事件执行