我正在使用Jquery multiselect进行项目。我遇到的问题是选择时特殊字符不能很好地呈现。例如,在我的选项列表中,我有值“Anadarko E& P”,当我选择此值时,它显示为“Anadarko E& P”。
有人知道如何防止这种情况发生吗? 在期待中感谢
答案 0 :(得分:1)
我得到了它的工作。找到下面的代码:
$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 attibute以获取标签,这可以正常工作
答案 1 :(得分:0)
仅当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
}
答案 2 :(得分:0)
我今天遇到了同样的问题,我发现了另一个我认为更好的解决方案,我将其发布在未来:
var multiSelect = $("#myField").multiselect({selectedList: 3});
multiSelect.multiselectfilter({autoreset: true});
multiSelect.data("echMultiselect")._setButtonValue = function(value){
this.buttonlabel.html(value);
}
问题已经讨论过here并且没有修复以避免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
属性的任何选项。