Angularjs应用程序中文本框和复选框模型中触发跨度点击和观看事件序列时发生冲突
conflict in triggering span click and watch events sequences in text box and check box models in Angularjs application
我正在监视文本框和复选框模型,以调用我的自定义函数。由于我不想在初始加载数据时在手表内部调用我的自定义函数,所以在手表内部,我取决于needwatch
标志何时调用我的定制函数。为此,我在span元素中保留了复选框和文本框,当单击span时,我会将needWatch
标志设为true,这样,当特定模型发生更改时,就会调用自定义函数,这样在初始加载数据时就不会调用此自定义函数。此逻辑适用于文本框(甚至适用于选择下拉框),但在复选框中失败。
原因是,对于文本框,ALWAYS,其跨度ng-click
事件首先触发,然后文本框模型上的监视功能接下来启动。其中,对于复选框,随机地,其监视功能首先触发,然后其跨度ng-click
事件接下来启动,反之亦然。
我还希望复选框,ALWAYS,它的跨度ng-click
事件首先被触发,而不是它的模型监视功能。有可能吗?
请找到plunker并尝试更改文本框和复选框值。
有些问题您没有涉及,例如:-我可以在不点击的情况下输入到文本输入。(使用选项卡代替)
所以最好只使用ng-change
,你就不需要垃圾needWatch
了。或者让手表像这样工作:
$scope.$watch('checkboxModel', function(newval, oldval) {
if (newval != oldval) {
console.log('watch', newval, oldval);
}
}, true);
在Angular中,$watch侦听器被粗体传递watch表达式的newValue和oldValue。
如果目标是避免在初始化期间运行自定义函数,请比较oldValue和newValue的值。如果它们相等,则在初始化期间调用手表,并且不应运行自定义函数。
Angular文档建议将此作为处理初始化周期的标准方法:https://docs.angularjs.org/api/ng/type/$rootScope.Scope
示例:
$scope.model = { textbox: '', checkbox: false };
$scope.$watch( 'model.textbox', function( newValue, oldValue {
if( newValue === oldValue )
return;
customFunction( newValue );
});
$scope.$watch( 'model.checkbox', function( newValue, oldValue ){
if( newValue === oldValue )
return;
customFunction( newValue );
});
function customFunction( value ){
console.log( "new value: " + value );
}
- jQuery与导航菜单上的mouseover事件冲突.
- 鼠标滚轮事件和滚动事件相互冲突
- 管理不应冲突的定时事件
- jQuery 和 OpenLayer 之间的事件侦听器冲突
- 使用冲突的事件侦听器将对象分隔到原型链中
- Javascript 鼠标按下和鼠标向上事件冲突
- 引导-sass 多选事件冲突
- jquery .empty() 与按键事件冲突
- 管理父子分区中的事件冲突
- 如何解决表行内冲突的单击事件
- 实例在事件上冲突
- 关于box2djs中的冲突事件处理程序
- Angularjs应用程序中文本框和复选框模型中触发跨度点击和观看事件序列时发生冲突
- Mouseup事件与可见性开关冲突
- 响应式站点导航菜单的jQuery点击事件冲突
- windows 8.1pc的IE11中鼠标移动事件与触摸事件冲突
- 输入文本区选择与鼠标下拉事件冲突
- js鼠标悬停事件冲突
- JQuery-UI Datepicker()点击事件似乎与自定义事件冲突
- 在vejs中单击鼠标事件冲突