有时候真不知道苹果都在做些什么。。这次safari的更新会导致 form在使用xhr提交的时候,如果表单里有<input type="file" />但没有选择文件,这时候表单就提交失败了,本文的标题就是stackoverflow上面的人提出的问题。
大部分奇技淫巧(或者说奇巧淫技)都是说,如果判断input type=file,如果length==0,即没有选择文件,就先将它disable掉,然后new FormData后,再将它恢复。
原文看这里,提供了两个解决方案,一个是用jquery的,一个是不用的:https://stackoverflow.com/questions/49614091/safari-11-1-ajax-xhr-form-submission-fails-when-inputtype-file-is-empty
用JQuery:
JavaScript代码
- var $form = $('form')
- var $inputs = $('input[type="file"]:not([disabled])', $form)
- $inputs.each(function(_, input) {
- if (input.files.length > 0) return
- $(input).prop('disabled', true)
- })
- var formData = new FormData($form[0])
- $inputs.prop('disabled', false)
不用:
JavaScript代码
- var form = document.querySelector('form')
- var inputs = form.querySelectorAll('input[type="file"]:not([disabled])')
- inputs.forEach(function(input) {
- if (input.files.length > 0) return
- input.setAttribute('disabled', '')
- })
- var formData = new FormData(form)
- inputs.forEach(function(input) {
- input.removeAttribute('disabled')
- })
为什么safari还不更新????
更详细 更多的回复,直接看原文吧
小孩在背书的时候,突然读到了老羞成怒,原以为是小朋友L和N不分,结果一看确实是老羞成怒,google了一下,原来是有下列的解析,原文来自:http://blog.sina.com.cn/s/blog_513bad040100c950.html
钱钟书的《读〈伊索寓言〉》中有句这样的话:“这只乌鸦借来的羽毛全给人家拔个干净,现了原形,老羞成怒……”有学生向我提出,这个“老羞成怒”应写成“恼羞成怒”,是不是这样呢?
《现代汉语成语规范词典》将“恼羞成怒”注解为“由于气恼、羞愧而发怒”,并明示不要写成“老羞成怒”。但在《新编汉语词典》中将两个词语全部并入了语汇条款中,只是“恼羞成怒”一词有注解,而“老羞成怒”一词没有注解。较为详尽的当属《汉语大词典》,它将“恼羞成怒”一词注解为“因烦恼羞愧到了极点而发怒”,将“老羞成怒”一词注解为“因恼恨羞愧而发怒”。并各自有了例句。现各举两例:
恼羞成怒:1、冒得官见他如此说法,不禁恼羞成怒,喝令左右:“替我赶他出去!”(《官场现形记》第三十回)
2、那排长恼羞成怒,拿着枪头的刺刀,向哥哥的手臂上扎了一下。(冰心《去国·斯人独惟悴》)
老羞成怒:1、想因却蔹一事,太激烈了,故此老羞成怒耳。(清·孔尚任《桃花扇》)
2、张志让律师当日为沈老先生的辩护人,不知说了多少直率的话那检察官居然老羞成怒,大发雷霆。(邹韬奋《患难余生记》第一章)
由此可见,两个词语应该是可以通用的。从《现代汉语大词典》(规范用法)“恼羞成怒”注解后的说明:“‘恼羞成怒’也说‘老羞成怒’”中也可说明这一点。
那么这两个词语有没有区别呢?
据《辞海》的解释:“恼”有三个义项:①恨、怒 ②忧愁、苦闷 ③病痛。“恼羞成怒”这个词语很显然用的是第一个义项。据《现代汉语词典》的解释:“老”有十七个义项,其中的第十四个义项是“很、极”。因此,较为正确的解释应当是:
恼羞成怒:因恼恨羞愧而导致发怒。其中““恼”跟“羞”一样是形容词,属于并列结构。
老羞成怒:因羞愧到了极点而发怒。其中“老”属于副词,来修饰“羞”,意思是“极端羞愧”、“很羞愧”。
有时候你会在Yii2中自定义一些组件,比如:Yii::$app->sms / Yii::$app->chat / Yii::$app->queue(你看,这个虽然是系统自带的,但不代表就能被认得出)
那怎么办?IDE无法认出的时候,难道我们一个个的写:
PHP代码
- <?php
-
- $im = Yii::$app->im;
如果是这样,那也太累了。翻了一下google,找到这一篇教程:https://github.com/samdark/yii2-cookbook/blob/master/book/ide-autocompletion.md,意思就是说,你自己建一个Yii的文件,创建一些类,然后把刚才的Yii::$app->sms之类的,注释成类的property,然后IDE就能识别了。
最后找到一个项目:https://github.com/iiifx-production/yii2-autocomplete-helper,看样子好象一位俄罗斯大佬写的,嗯,它自动根据你的config来生成一个类似的_ide_components.php,并建议你在IDE里将Yii.php设置为:Mark As Text,这样IDE就不会主动去读Yii.php并识别了。
于是我composer引用了并执行了一下。然后在.gitignore里忽略了_ide_components.php,感觉世界一下子清静多了。
简单用法:
PHP代码
- 'bootstrap' => ['log', 'autocomplete'],
- 'components' => [
- 'autocomplete' => [
- 'class' => 'iiifx\Yii2\Autocomplete\Component',
- 'config' => [
- '@app/config/console.php', # <-- config list
- '@app/config/web.php',
- ],
- ],
- # ...
- ]