javascript - 最新版本的 jQuery UI selectmenu 中的 `format` 回调

标签 javascript jquery jquery-ui jquery-ui-selectmenu

我想做<select>使用 jQuery UI Selectmenu 替换为自定义文本格式.

这个 fiddle 中的第三个和第五个选择是我想要实现的目标的很好的例子:

http://jsfiddle.net/fnagel/GXtpC/

在 fiddle 中,定义了函数 addressFormatting() ,它采用原始选项文本并返回 html 输出,该输出将用于呈现选择菜单。该函数在 selectmenu 初始化中作为回调传递:

$('select').selectmenu({
    format: addressFormatting
});

我正在使用jQuery UI Selectmenu 1.11.4 。问题是format此版本中不存在回调选项。

这是来自jQuery UI Selectmenu version 1.5.0pre的代码的一部分,在提供的 fiddle 中使用:

$.widget("ui.selectmenu", {
options: {
    appendTo: "body",
    typeAhead: 1000,
    style: 'dropdown',
    positionOptions: null,
    width: null,
    menuWidth: null,
    handleWidth: 26,
    maxHeight: null,
    icons: null,
    format: null, // <<<<<<<<<<<< FORMAT OPTION IS PRESENT <<<<<<<<<<<<
    escapeHtml: false,
    bgImage: function() {}
},

这是我正在使用的新版本的代码部分:

var selectmenu = $.widget( "ui.selectmenu", {
version: "1.11.4",
defaultElement: "<select>",
options: {
    appendTo: null,
    disabled: null,
    icons: {
        button: "ui-icon-triangle-1-s"
    },
    position: {
        my: "left top",
        at: "left bottom",
        collision: "none"
    },
    width: null,

    // callbacks
    change: null,
    close: null,
    focus: null,
    open: null,
    select: null
}, 

format此处不存在选项,在初始化中使用它没有任何效果。

API documentation ,有_renderItem()方法,其名称表明它可用于向选择添加自定义格式,但它具有私有(private)范围,因此我无法从小部件外部使用它。还有公众create()方法,但我不确定是否可以或者是否应该使用它来更改创建的选择菜单的结构。

最佳答案

如上所述,格式选项在成为 jquery-ui 库的一部分之前已从选择菜单中删除。有一种方法可以将自定义代码注入(inject) selectmenu 小部件并覆盖处理此功能的函数。

// Create objects that you want inside the menu list
var RenderItem = function(item) {
    return $('<div/>')
        .addClass('ui-menu-item-wrap')
        .append(
            $('<span/>')
                .addClass('ui-menu-item-header')
                .text(item.label + ' (' + item.km + " km)")
        ).append(
            $('<span/>')
                .addClass('ui-menu-item-description')
                .text(item.desc)
        );
};

// Extend functions in the selectmenu plugin
$.widget("ui.selectmenu", $.ui.selectmenu, {

    // Input middleware to the _setText function, that will build
    // jQuery objects to render
    _renderItem: function( ul, item ){
        var li = $( "<li>" ),
            wrapper = $( "<div>", {
                title: item.element.attr( "title" )
            } );

        if ( item.disabled ) {
            this._addClass( li, null, "ui-state-disabled" );
        }
        // Insert middleware
        this._setText( wrapper, RenderItem(item));

        return li.append( wrapper ).appendTo( ul );
    },

    // Overwrite this function to add custom attribute values from the option
    _parseOption: function( option, index ) {
        var optgroup = option.parent( "optgroup" );
        return {
            element: option,
            index: index,
            value: option.val(),
            label: option.text(),
            desc: option.attr('data-desc'), // Custom <option> value saved to item
            km: option.attr('data-km'), // Custom <option> value saved to item
            optgroup: optgroup.attr( "label" ) || "",
            disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
        };
    },

    // Overwrite this function to append a value, instead of inserting text
    // So that the jQuery element is handled correctly.
    _setText: function(element, value) {
        if (value) {
            element.append(value);
        } else {
            element.html("&#160;");
        }
    }
});

关于javascript - 最新版本的 jQuery UI selectmenu 中的 `format` 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018552/

相关文章:

javascript - 当转义值时,Mysql 查询不再起作用

javascript - 在不使用 CSS 的情况下使元素与浏览器屏幕顶部保持一定距离?

jquery - 可以使用 jQuery 更改元素的宽度来修改另一个元素的字体大小吗?

javascript - 我怎样才能滚动到并可能突出显示 div 中的文本溢出 : true?

javascript - 在 #DIV 上调用函数而不是 window()

jquery - 将 JSON 从操作类传递到 JSP,而不在 struts 中使用 Ajax

jquery - 如何在 Chrome 扩展中实现 jQuery UI

javascript - Jquery 隐藏/显示不适用于动画

javascript - 如何在 JQuery 中区分具有 id 的多个 anchor 标记上的 onclick 乐趣

c# - 如何将 javascript 方法(JSON 对象)的结果发送到 asp.net webform 上的代码隐藏?