我在一个项目中使用 Jquery 多选。我遇到的问题是特殊字符在选择时不能很好地呈现。例如,在我的选择列表中,我有值“Anadarko E&P”,当我选择这个值时,它显示为“Anadarko E&P”。
有人知道如何防止这种情况吗?感谢期待
我在一个项目中使用 Jquery 多选。我遇到的问题是特殊字符在选择时不能很好地呈现。例如,在我的选择列表中,我有值“Anadarko E&P”,当我选择这个值时,它显示为“Anadarko E&P”。
有人知道如何防止这种情况吗?感谢期待
我让它工作。找到下面的代码:
$j(selector).multiselect({
header: true,
multiple: false,
selectedList: 1,
classes: "jq_over",
selectedText: function(numChecked, numTotal, checkedItems){
for(var i = 0; i < checkedItems.length; i++){
return $j(checkedItems[i]).siblings().text();
}
}
}).multiselectfilter();
我必须修改 selectedText 属性以获取标签,这可以正常工作
我今天遇到了同样的问题,我找到了另一个我认为更好的解决方案,我将其发布在这里以备将来使用:
var multiSelect = $("#myField").multiselect({selectedList: 3});
multiSelect.multiselectfilter({autoreset: true});
multiSelect.data("echMultiselect")._setButtonValue = function(value){
this.buttonlabel.html(value);
}
该问题已在此处讨论,但未修复以避免 XSS 漏洞,完整的官方答案是:
无处不在的 HTML 使代码更容易受到 XSS 漏洞的影响。最初的开发人员故意将其设置为使默认行为安全,如果您需要不安全的行为,则可以覆盖该方法并添加 html。在文档的自定义部分中有关于如何执行此操作的文档。
由于这个问题被打开,上面描述的行实际上也从 html() 更改为 text() 。
无论如何,在我的场景中,我想我可以忽略这种问题,因为我的<option>
元素不能被用户修改。
注意,jquery.multiselect.js中的原始实现是:
// this exists as a separate method so that the developer
// can easily override it.
_setButtonValue: function(value) {
this.buttonlabel.text(value);
},
并且明确指定可以很容易地覆盖。
PS:它适用于任何selectedList
属性选项。
仅当 selectedList = 1 时才有效。对于其他情况(例如 selectedList = 4),我修改如下,
selectedText: function(numChecked, numTotal, checkedItems){
var selectedList = 4;
if(checkedItems.length > selectedList)
{
return checkedItems.length + " selected";
}
else
{
var selectedTextArr = [];
for(var i = 0; i < checkedItems.length; i++)
{
selectedTextArr.push($(checkedItems[i]).siblings().text());
}
return selectedTextArr.join(', ').replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<");
}
}
但是,要从根本上解决问题,修改 jquery.multiselect.js 可能是一种方法......
if(numChecked === 0) {
value = o.noneSelectedText;
} else {
if($.isFunction(o.selectedText)) {
value = o.selectedText.call(this, numChecked, $inputs.length, $checked.get());
} else if(/\d/.test(o.selectedList) && o.selectedList > 0 && numChecked <= o.selectedList) {
value = $checked.map(function() { return $(this).next().html(); }).get().join(', ');
} else {
value = o.selectedText.replace('#', numChecked).replace('#', $inputs.length);
}
value = value..replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<"); // newly added
}