zhuguifei
2026-03-10 58402bd5e762361363a0f7d7907153c77dbb819f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
    @name Edo.controls.Search
    @class
    @typeName search
    @description 搜索框
    @extend Edo.controls.Trigger
*/
Edo.controls.Search = function(config){    
    /**
        @name Edo.controls.Search#cleartrigger
        @event
        @domevent
        @description 关闭图标点击事件
    */
 
    Edo.controls.Search.superclass.constructor.call(this);    
    
};
Edo.controls.Search.extend(Edo.controls.Trigger,{
    /**
        @name Edo.controls.Search#clearVisible
        @property
        @type Boolean
        @default false
        @description 是否显示关闭图标
    */
    clearVisible: false,
    
    elCls: 'e-text e-search',
    
    clearTriggerCls: 'e-trigger e-trigger-clear e-close',
    clearTriggerOverCls: 'e-trigger-over',
    
    getFieldWidth: function(){
        return this.realWidth - (this.clearVisible ? this.triggerWidth*2: (this.triggerVisible ? this.triggerWidth : 0));
    },
    getInnerHtml: function(sb){
        Edo.controls.Search.superclass.getInnerHtml.call(this, sb);
        
        sb[sb.length] = '<div class="';
        
        sb[sb.length] = this.clearTriggerCls;
        sb[sb.length] = '" style="display:'+(this.clearVisible ? 'block' : 'none')+';right:'+this.triggerWidth+'px;height:';
        sb[sb.length] = this.realHeight-1;
        sb[sb.length] = 'px;">';
        sb[sb.length] = this.getTriggerHtml();
        sb[sb.length] = '</div>';
    },
    initEvents: function(){             
        Edo.controls.Search.superclass.initEvents.call(this);
        
        if(!this.design){
            Edo.util.Dom.on(this.clearTrigger, 'mousedown', this._onClearTrigger, this);
            Edo.util.Dom.addClassOnOver(this.clearTrigger, this.clearTriggerOverCls);            
        }        
    },
    createChildren: function(el){    
        Edo.controls.Search.superclass.createChildren.call(this, el);
        this.clearTrigger = this.el.lastChild;
    },   
    syncSize: function(){    //设置组件尺寸,并设置容器子元素的所有尺寸!
        Edo.controls.Search.superclass.syncSize.call(this);                    
        this.clearTrigger.style.display = this.clearVisible ? 'block' : 'none';
        
        this.clearTrigger.style.height = (this.realHeight -6) + 'px';
        
        var fieldwidth = this.getFieldWidth();
        if(this.clearVisible){
            this.clearTrigger.style.left = fieldwidth+'px';
        }
    },
    _setClearVisible: function(value){
        if(this.clearVisible != value){
            this.clearVisible = value;            
            if(this.el){
                this.syncSize();
            }
            this.changeProperty('clearVisible', value);
        }
    },
    _onClearTrigger: function(e){
        if(!this.enable) return;
        if(e.button != Edo.util.MouseButton.left) return;
        this._setClearVisible(false);
        
        this.focus.defer(50, this);        
        
        e.type = 'cleartrigger';
        e.source = this;
        this.fireEvent('cleartrigger', e);
        
    }
    
});
Edo.controls.Search.regType('search');