【问题标题】:How to handle jQuery UI Selectmenu change event如何处理 jQuery UI Selectmenu 更改事件
【发布时间】:2014-08-27 02:21:29
【问题描述】:

我使用带有custom render option 的jquery ui 选择菜单

我如何处理change 事件?

我试试

   $('#filesA').on('change', function() {
  alert( 'x'); 
});

但它不适用于 jQuery UI Selectmenu

我也试试

$( "#filesA" ).selectmenu({
  change: function( event, ui ) {}
});

它正在工作,但它正在创建另一个选择菜单实例!

我的js代码

$( document ).ready(function() {

  $( "#filesA" ).selectmenu({ change: function( event, ui ) { alert('x'); }});



$.widget( "custom.iconselectmenu", $.ui.selectmenu, {
                            _renderItem: function( ul, item ) {
                                var li = $( "<li>", { text: item.label } );

                                if ( item.disabled ) {
                                    li.addClass( "ui-state-disabled" );
                                }

                                $( "<span>", {
                                    style: item.element.attr( "data-style" ),
                                    "class": "ui-icon " + item.element.attr( "data-class" )
                                })
                                .appendTo( li );

                                return li.appendTo( ul );
                            }
                        });

                        $( "#filesA" )
                        .iconselectmenu()
                        .iconselectmenu( "menuWidget" )
                        .addClass( "ui-menu-icons" );




});

还有我的html代码

                <label class="langLabel" for="filesA">Select your language:</label>
                <select name="filesA" id="filesA">
                    <option value="lan1">Test Lang1</option>
                    <option value="lan2">Test Lang2</option>
                    <option value="lan3">Test Lang3</option>
                    <option value="lan4">Test Lang4</option>
                    <option value="lan5">Test Lang5</option>
                 </select>

【问题讨论】:

  • 你说it creates another instance是什么意思?也许在 JSfiddle 中显示它......

标签: jquery jquery-ui select-menu


【解决方案1】:

我是这样解决的:

$.widget( "custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function( ul, item ) {
    var li = $( "<li>", { text: item.label } );

    if ( item.disabled ) {
        li.addClass( "ui-state-disabled" );
    }

    $( "<span>", {
        style: item.element.attr( "data-style" ),
        "class": "ui-icon " + item.element.attr( "data-class" )
    })
    .appendTo( li );

    return li.appendTo( ul );
},});      
$("#filesA").iconselectmenu({ change: function( event, ui ) { alert("Hi"); s}}).iconselectmenu( "menuWidget" ).addClass( "ui-menu-icons" );

【讨论】:

    【解决方案2】:

    只需将触发器 'change' 更改为 'selectmenuchange'

    $('#filesA').on('selectmenuchange', function() {
        alert( 'x'); 
    });
    

    【讨论】:

    • 有什么区别?
    【解决方案3】:

    或者更具体地说...

    $(function() {
    $.widget( "custom.iconselectmenu", $.ui.selectmenu, {
    _renderItem: function( ul, item ) {
    var li = $( "<li>", { text: item.label } );
    if ( item.disabled ) {
    li.addClass( "ui-state-disabled" );
    }
    $( "<span>", {
    style: item.element.attr( "data-style" ),
    "class": "ui-icon " + item.element.attr( "data-class" )
    })
    .appendTo( li );
    return li.appendTo( ul );
    }
    });
    
    $( "#filesB" )
    .iconselectmenu()
    .iconselectmenu( "menuWidget" )
    .addClass( "ui-menu-icons customicons" );
    
    $('#filesB').iconselectmenu({
        change: function( event, ui) {
        alert('something has changed');
        }
    });
    });
    

    【讨论】:

    • 请解释您的答案修复了什么。转储代码块并不总是一个好主意。
    【解决方案4】:

    我遇到了同样的问题。最终用 iconselectmenu 而不是 selectmenu 克服了它

    $( "#filesA" ).iconselectmenu({ change: function( event, ui ) { alert('x'); }});
    

    【讨论】:

      【解决方案5】:

      看这里:http://jsfiddle.net/JLVSM/

      只需将您的代码更改为:

      $( "#filesA" ).selectmenu({ change: function( event, ui ) { alert('x'); }});
      
      $.widget( "custom.iconselectmenu", $.ui.selectmenu, {
          _renderItem: function( ul, item ) {
              var li = $( "<li>", { text: item.label } );
      
              if ( item.disabled ) {
                  li.addClass( "ui-state-disabled" );
              }
      
              $( "<span>", {
                  style: item.element.attr( "data-style" ),
                  "class": "ui-icon " + item.element.attr( "data-class" )
              })
              .appendTo( li );
      
              return li.appendTo( ul );
          },
      });
      
      $( "#filesA" ).addClass( "ui-menu-icons" );
      

      【讨论】:

      • 感谢@j809 并删除`change: function(event,ui){ alert("Changed"); },` 它不工作
      猜你喜欢
      • 2012-02-29
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2012-12-13
      相关资源
      最近更新 更多