提交事件 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 的项目,并且我必须非常小心地引入箭头函数,const
、let
等。ESLint 可以提供帮助(尽管听起来像您正在添加 Babel)。以上是关于提交事件 preventDefault() 在 os9 的 iPad/iPhone 上不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
reactjs preventDefault() 不会阻止表单提交时页面重新加载
深入了解preventDefault与stopPropagation