js中blur和click事件的冲突

问题:当焦点在输入框时,点击取消按钮会触发blur和click事件,导致需要点击两次取消按钮才能关闭弹窗

原因:这是因为blur事件比click事件先触发,而javascript为单线程,同一时间只能执行处理一个事件,所以当blur处理程序时,导致其后续click事件并不会执行

var popover = document.getElementById('popover');
var input = document.getElementById('category-name');
var btn = document.getElementById('btn-cancel');
var error = document.getElementById('error');

解决方案1:如果click事件比blur事件先触发就没有问题了,所以可以给blur事件延迟触发

var timer;
 input.onblur = function() {
    timer = setTimeout(function() {
        console.warn('onblur');
        error.style.display = 'block';
    }, 100);
 }
 btn.onclick = function() {
    console.warn('onclick');
    clearTimeout(timer);
    error.style.display = 'none';
    popover.style.display = 'none';
 }

解决方案2:将click事件改为mousedown事件,让其优先于blur事件执行(缺点是用户体验不好,鼠标按下便触发了事件)

 input.onblur = function() {
    console.warn('onblur');
    error.style.display = 'block';
 }
 btn.onmousedown = function() {
    console.warn('onmousedown');
    error.style.display = 'none';
    popover.style.display = 'none';
 }

解决方案3:给按钮添加一个mousedown事件,在其中执行event.preventDefault()阻止浏览器默认事件,这样点击按钮时输入框就不会失去焦点了

input.onblur = function() {
    console.warn('onblur');
    error.style.display = 'block';
}
btn.onmousedown = function(e) {
    console.warn('onmousedown');
    e.preventDefault();
}
btn.onclick = function() {
    console.warn('onclick');
    error.style.display = 'none';
    popover.style.display = 'none';
}

参考:https://www.jianshu.com/p/ad8569eaca0c

安卓安装apk失败错误码-15

应用仅仅属于测试的debug版本,仅限于adb安装,其他安装方式会失败。

用Android Studio编译app,调试的时候一切正常,但是在手机上安装或者是用adb安装的时候就提示失败,adb安装时提示的错误:INSTALL_FAILED_TEST_ONLY。

Android Studio 3.0以上会在debug apk的manifest文件application标签里自动添加 android:testOnly=”true”属性,导致IDE中run跑出的apk在大部分手机上只能用adb install -t 来安装,在一些安卓手机上甚至安装不了
解决办法:在gradle.properties(项目根目录或者gradle全局配置目录 ~/.gradle/)文件中添加android.injected.testOnly=false

以上方法如果还没有用的话。比如,Android Studio 不是用gradle编译的情况下,就需要用如下办法。

在新版AS中,点这个绿三角生成的apk,都会被标记为test only。

正确的做法是,选择Build APK(s),如下图所示:

参考:
https://blog.csdn.net/kernel_/article/details/78780192
https://blog.csdn.net/qq_25330791/article/details/89540054
https://blog.csdn.net/lihenhao/article/details/79146211

PHP 7.3 “continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”?

Composer PHP7.3 SHA384 is not supported by your openssl extension
在使用composer 更新时候的,报错
解决方法
composer selfupdate
composer self-update

再次报错如下:
SHA384 is not supported by your openssl extension, could not verify the phar file integrity

解决(mac)
重新下载在安装
rm -f /usr/local/bin/composer
curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Remove Your older versions and install the latest version of Composer,
Remove Your older version: sudo rm -f /usr/local/bin/composer
Download the installer: sudo curl -s https://getcomposer.org/installer | php
Move the composer.phar file: sudo mv composer.phar /usr/local/bin/composer

参考:
https://www.heibaiketang.com/forum/show/173.html

黄金时代——《黄金时代》读后感

王小波的《黄金时代》写了二十年。

里面有很多句子很美。特别是下面这一段,想必大多数爱读书的人都看到过:
天色微微向晚,天上飘着懒洋洋的云彩。下半截沉在黑暗里,上半截仍浮在阳光中。那一天我二十一岁,在我一生的黄金时代。我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云。

继续阅读“黄金时代——《黄金时代》读后感”

Java微信语音amr格式转mp3格式,兼容Linux/Mac/Windows,支持Maven

其实之间用dadiyang的jave库就可以了,建议切换maven到ali的国内镜像库。但是由于mac升级,需要用最新版本的ffmpeg来运行,其它没有什么特别要注意的地方啦。

建议参考我这边fork的库,其实就是更新了ffmpeg-mac这个文件咯。

参考:

https://blog.csdn.net/dadiyang/article/details/85003240

https://github.com/deaboway/jave

https://baijiahao.baidu.com/s?id=1596812208203490238&wfr=spider&for=pc

http://ffmpeg.org/