Jquery multiselect值不是UTF-8

时间:2014-05-28 11:18:59

标签: jquery jquery-multiselect

我正在使用Jquery multiselect进行项目。我遇到的问题是选择时特殊字符不能很好地呈现。例如,在我的选项列表中,我有值“Anadarko E& P”,当我选择此值时,它显示为“Anadarko E& P”。 enter image description here

有人知道如何防止这种情况发生吗? 在期待中感谢

3 个答案:

答案 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(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/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(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/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属性的任何选项。