我有一个带有模糊事件的简单组合框。模糊事件当前有一个要求测试目的的警报。
问题是这个模糊事件会被触发两次,如下所示:
如果光标位于此组合框中,并且用户按下'tab'键,则组合框失去焦点 - >模糊事件被解雇。
一旦组合框失去焦点,如果用户在屏幕上的任意位置点击鼠标,则模糊事件会再次被触发。
无论如何,这个模糊事件只能被触发一次吗?
以下是我正在使用的完整代码:
<html>
<head>
<title>Test Page</title>
<link rel="stylesheet" type="text/css" href="ext-4.0.2a/resources/css/ext-all.css">
<script type="text/javascript" src="ext-4.0.2a/bootstrap.js"></script>
<script type='text/javascript'>
Ext.onReady(function(){
Ext.define("Post", {
extend: 'Ext.data.Model',
fields: [
{name: 'id', mapping: 'post_id'},
{name: 'title', mapping: 'topic_title'},
{name: 'topicId', mapping: 'topic_id'},
{name: 'author', mapping: 'author'},
{name: 'lastPost', mapping: 'post_time', type: 'date', dateFormat: 'timestamp'},
{name: 'excerpt', mapping: 'post_text'}
]
});
ds = Ext.create('Ext.data.Store', {
pageSize: 10,
proxy: {
type: 'jsonp',
url : 'http://www.sencha.com/forum/topics-remote.php',
reader: {
type: 'json',
root: 'topics',
totalProperty: 'totalCount'
}
},
model: 'Post'
});
panel = Ext.create('Ext.panel.Panel', {
renderTo: Ext.getBody(),
title: 'Search the Ext Forums',
width: 600,
bodyPadding: 10,
layout: 'anchor',
items: [{
xtype: 'combo',
store: ds,
displayField: 'title',
fieldLabel:'Blur Test',
listeners:{
blur:function(){
alert('1');
}
}
}, {
xtype: 'component',
style: 'margin-top:10px',
html: 'Live search requires a minimum of 4 characters.'
}]
});
});
</script>
</head>
<body>
</body>
</html>
提前感谢您的帮助。
PS:我正在使用ExtJS版本4.0.2a并在Firefox,IE9和IE8中检查了这种行为。所有这些都是两次射击事件。但是在Chrome中检查后,该事件只会被触发一次。
答案 0 :(得分:0)
一个(非常可怕)选项是创建一个变量来跟踪模糊计数:
var AlreadyBlurred = false; //Obviously you want to put this somewhere NOT global
接下来,您可以在listeners
对象中执行此操作:
listeners: {
blur: function (){
if(!AlreadyBlurred)
{
// Do your code here
}
AlreadyBlurred = !AlreadyBlurred;
}
}
同样,这是一个非常可怕的想法,因为它可能会掩盖代码或Ext本身的问题。升级到4.0.7似乎没有帮助(jsfiddle的最新版本显示仍然会发生这种情况)。出于好奇,为什么要开始模糊事件呢?您可以在变更时进行,也可以选择所需的结果吗?