在使用input标签代替select实现下拉框功能时,有时要禁止input的输入功能,只能选择下拉框中选项,选择后进行判断是否有值进入。
正常思路是选择选项后,使用change事件,但是使用readonly将input变为只读后,change事件会失效。
解决办法:
选择选项后使input失去焦点(也不能输入,失去焦点也没有影响),使用blur事件,在blur中编写相应的逻辑代码。
注:
在ng-blur绑定的方法中直接写同步操作,会报错,如下:
$rootScope:inprog: $apply already in progress error.
原因:
调用 blur() 事件后,ng-blur 触发并且尝试一个新的执行周期,然后AngularJs就不干活了。
事实上,在 同步操作 的处理还没有完成时,blur 同步执行并且迅速触发了处理程序,这可能是 AngularJs 的一个 bug,解决:
可以使用
timeout解决这个问题。即在
t
i
m
e
o
u
t
解
决
这
个
问
题
。
即
在
timeout的回掉函数中编写逻辑代码,将延迟时间设为0即可。