EasyUI Forum
December 07, 2025, 01:33:17 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: BUG tagbox in datagridfilter  (Read 459 times)
Vladzimir
Newbie
*
Posts: 9


View Profile
« on: November 23, 2025, 10:20:45 AM »

I use
Code:
    $.extend($.fn.datagrid.defaults.filters, {
        tagbox: {
            init: function (container, options) {
                var input = $('<input>').appendTo(container);
                input.tagbox($.extend({
                    selectOnNavigation: true,
                    panelHeight: 'auto',
                    hasDownArrow: true,
                    limitToList: true
                }, options || {}));
                console.log('init');
                return input;
            },
            setValue: function (target, value) {
                console.log('setValue');
                if (value) {
                    $(target).tagbox('setValues', value);

                } else {
                    $(target).tagbox('clear');
                }
            },
            getValue: function (target) {
                console.log('getValue');
                return $(target).tagbox('getValues');
            },
            resize: function (target, width) {
                console.log('resize');
                $(target).tagbox('resize', width);
            },
            destroy: function (target) {
                console.log('destroy');
                $(target).tagbox('destroy');
            }
        }
    });
$(target).tagbox('setValues', value); return bug
Code:
Uncaught TypeError: can't access property "textbox", $.data(...) is undefined
$(target).tagbox('clear'); return bug
Code:
Uncaught TypeError: can't access property "options", $.data(...) is undefined
Logged
Vladzimir
Newbie
*
Posts: 9


View Profile
« Reply #1 on: November 28, 2025, 12:09:43 PM »

This is a global error. It works even with textbox, but only when resetting the value.

Code:
$(target).textbox('setValue', '');

I fixed it using only
Code:
                try {
                    $(target).textbox('setValue', value);
                } catch (e) {
                }
or
Code:
                try {
                    $(target).tagbox('setValues', value);
                } catch (e) {
                }
Does anyone have any ideas as to why this is happening?
Logged
jarry
Administrator
Hero Member
*****
Posts: 2303


View Profile Email
« Reply #2 on: December 05, 2025, 12:59:25 AM »

Please refer to this example.
Code:
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title>jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/icon.css">
<script type="text/javascript" src="https://www.jeasyui.com/easyui/jquery.min.js"></script>
<script type="text/javascript" src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="https://www.jeasyui.com/easyui/datagrid-filter.js"></script>
<script>
$.extend($.fn.datagrid.defaults.filters, {
tagbox: {
init: function (container, options) {
var input = $('<input>').appendTo(container);
input.tagbox($.extend({
selectOnNavigation: true,
panelHeight: 'auto',
hasDownArrow: true,
limitToList: true
}, options || {}));
console.log('init');
return input;
},
setValue: function (target, value) {
console.log('setValue');
if (value) {
$(target).tagbox('setValues', value);

} else {
$(target).tagbox('clear');
}
},
getValue: function (target) {
console.log('getValue');
return $(target).tagbox('getValues');
},
resize: function (target, width) {
console.log('resize');
$(target).tagbox('resize', width);
},
destroy: function (target) {
console.log('destroy');
$(target).tagbox('destroy');
}
}
});
$.extend($.fn.datagrid.defaults.operators, {
equal2: {
text: 'Equal',
isMatch: function (source, value) {
const vv = $.isArray(value) ? value : value.split(',');
return $.inArray(source,vv) >= 0;
}
},
});
var data = [
{ "productid": "FI-SW-01", "productname": "Koi", "unitcost": 10.00, "status": "P", "listprice": 36.50, "attr1": "Large", "itemid": "EST-1" },
{ "productid": "K9-DL-01", "productname": "Dalmation", "unitcost": 12.00, "status": "P", "listprice": 18.50, "attr1": "Spotted Adult Female", "itemid": "EST-10" },
{ "productid": "RP-SN-01", "productname": "Rattlesnake", "unitcost": 12.00, "status": "P", "listprice": 38.50, "attr1": "Venomless", "itemid": "EST-11" },
{ "productid": "RP-SN-01", "productname": "Rattlesnake", "unitcost": 12.00, "status": "P", "listprice": 26.50, "attr1": "Rattleless", "itemid": "EST-12" },
{ "productid": "RP-LI-02", "productname": "Iguana", "unitcost": 12.00, "status": "P", "listprice": 35.50, "attr1": "Green Adult", "itemid": "EST-13" },
{ "productid": "FL-DSH-01", "productname": "Manx", "unitcost": 12.00, "status": "N", "listprice": 158.50, "attr1": "Tailless", "itemid": "EST-14" },
{ "productid": "FL-DSH-01", "productname": "Manx", "unitcost": 12.00, "status": "P", "listprice": 83.50, "attr1": "With tail", "itemid": "EST-15" },
{ "productid": "FL-DLH-02", "productname": "Persian", "unitcost": 12.00, "status": "P", "listprice": 23.50, "attr1": "Adult Female", "itemid": "EST-16" },
{ "productid": "FL-DLH-02", "productname": "Persian", "unitcost": 12.00, "status": "N", "listprice": 89.50, "attr1": "Adult Male", "itemid": "EST-17" },
{ "productid": "AV-CB-01", "productname": "Amazon Parrot", "unitcost": 92.00, "status": "N", "listprice": 63.50, "attr1": "Adult Male", "itemid": "EST-18" }
];
$(function () {
var dg = $('#dg').datagrid({
filterBtnIconCls: 'icon-filter'
});
dg.datagrid('enableFilter', [{
field: 'listprice',
type: 'numberbox',
options: { precision: 1 },
op: ['equal', 'notequal', 'less', 'greater']
}, {
field: 'unitcost',
type: 'numberbox',
options: { precision: 1 },
op: ['equal', 'notequal', 'less', 'greater']
}, {
field: 'status',
type: 'tagbox',
op1: ['contains'],
options: {
value: ['P', 'N'],
editable: false,
data: [{ value: 'P', text: 'P' }, { value: 'N', text: 'N' }],
onChange: function (value) {
setTimeout(() => {
if (value == '' || value.length == 0) {
dg.datagrid('removeFilterRule', 'status');
} else {
dg.datagrid('addFilterRule', {
field: 'status',
op: 'equal2',
value: value
});
}
dg.datagrid('doFilter');
}, 200)
}
}
}]);
});
</script>
</head>

<body>
<table id="dg" title="DataGrid" style="width:900px;height:250px" data-options="
singleSelect:true,
data:data
">
<thead>
<tr>
<th data-options="field:'itemid',width:80">Item ID</th>
<th data-options="field:'productid',width:100">Product</th>
<th data-options="field:'listprice',width:80,align:'right'">List Price</th>
<th data-options="field:'unitcost',width:80,align:'right'">Unit Cost</th>
<th data-options="field:'attr1',width:250">Attribute</th>
<th data-options="field:'status',width:150,align:'center'">Status</th>
</tr>
</thead>
</table>
</body>

</html>
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!