【问题标题】:.change(function() { doesn't alert an option value after changing options of select menu.change(function() { 更改选择菜单的选项后不提醒选项值
【发布时间】:2013-03-25 12:04:47
【问题描述】:

更改选择菜单的选项后,以下调用函数不会提醒选项值:

不发出警报:

<script type="text/javascript">
jQuery(document).ready(function($){       
    $(".selectmenu").scrollectBox({                           
        preset: 'dropdown',
        numVisibleOptions: 4,
        scrollInterval: 150, 
        scrollOn: 'hover',
        listWidth: 160,
        onSelectEvent: null

}).change(function() {
   var optionvalue = $("select.selectmenu").val(); 
   alert('Selected value ' + optionvalue);     
 });
});

</script>

但以下更改功能独立发出警报

发出警报:

<script type="text/javascript">
   jQuery(document).ready(function($){    
      $(".selectmenu").change(function() {
       var optionvalue = $("select.selectmenu").val(); 
     alert('Selected value ' + optionvalue);        
     });
    });
</script>

    <select onchange="" name="selectmenu" id="translator" class="selectmenu" >
     <option value="Select Language">Select The Language</option>
     <option value="en|af">Afrikaans</option>
     <option value="en|sq">Albanian</option>
     </select>

如何从第一个代码块中获得警报?请注意,第一个代码块中的onSelectEvent: 是选项更改的自定义触发事件。

谢谢,

【问题讨论】:

    标签: jquery clone onchange select-menu


    【解决方案1】:

    您的第一个代码不会alert,因为您将change 事件分配给document 而不是下拉列表。

    编辑:评论回复

    插件有以下两个option使用它。

    onSelectEvent

    用于处理选项选择的自定义事件处理程序。该函数可能有两个参数;点击对象(选项内的链接)和点击事件,例如:var customSelectHandler = function($obj, event){...};。默认为空。

    onSelectFunc

    将从默认处理程序中调用的函数(在开始时)。该函数可能有两个参数;点击对象(选项内的链接)和点击事件,例如:var extraFunc = function($obj, event){...};。默认为空。

    【讨论】:

    • 但我必须同时调用这两个函数或一个接一个地调用。我必须检索选项值并通过克隆的选择菜单传递它,谢谢,
    • @Dipesh Parmar 你能告诉我在这种情况下如何编写自定义的onSelectEvent 吗?我尝试了很多方法。 onSelectEvent 在调用函数中不能保持克隆选择菜单的功能。因此,克隆选择菜单丢失并降级为标准菜单。谢谢,
    • 哎呀!这是一个意外的复制和粘贴错误。我一直在不断更改呼叫功能,而错误就在中间。但是,我已经更新了我的问题和评论。
    【解决方案2】:

    您想将事件附加到选择框而不是文档。

    jQuery(document).ready(function($){       
        $(".selectmenu").scrollectBox({                           
            // ...
        }).change(function() {
            var optionvalue = $("select.selectmenu").val(); 
            alert('Selected value ' + optionvalue); 
        });;    
    })
    

    jQuery 的“流利”语法总是返回您正在使用的对象,因此您可以将同一选择器上的方法链接在一起。

    正如 Jai 所建议的,您也没有获得所选选项的值:

    var optionvalue = $("option:selected", this).val();
    

    【讨论】:

    • 仍然 optionvalue 不会有正确的值。见 Jai 的回答
    • @lordvlad 如果页面上只有 一个 &lt;select class="selectmenu"&gt; 元素,那完全没问题。另请参阅我对 Jai 回答的评论,他的建议过于复杂,无法获得价值。
    • @AnthonyGrist,你是对的。抱歉,我很确定 val() 在 &lt;select&gt; 上不起作用,但在 &lt;option&gt; 上不起作用
    • @Tyriar 这是一个意外的复制和粘贴错误。我一直在不断更改呼叫功能,而错误就在中间。我已经更新了我的问题。谢谢,
    【解决方案3】:

    试试这个:

    jQuery(document).ready(function($){ 
       $(".selectmenu").scrollectBox({                           
          preset: 'dropdown',
          numVisibleOptions: 4,
          scrollInterval: 150, 
          scrollOn: 'hover',
          listWidth: 160,
          onSelectEvent: null
      }).change(function() { //<-------------------------------try it here.
         var optionvalue = $("option:selected", this).val();
         alert('Selected value ' + optionvalue); 
      });
    });
    

    【讨论】:

    • 或者只是this.value,避免不必要地使用jQuery。然而,这并不是代码的实际问题。最终结果将是相同的。
    • @AnthonyGrist 哦!我现在明白了。 OP 将更改事件提供给文档而不是选择。
    • @Jai 这是一个意外的复制和粘贴错误。我一直在不断更改呼叫功能,而错误就在中间。我已经更新了我的问题。谢谢,
    • @Jai 我试过$("option:selected", this).val(); 但它没有返回任何警报。我猜.change(function() 可能会根据onSelectEvent: 发出警报。知道如何将它们绑定在一起吗?
    【解决方案4】:

    你的第一个代码应该是这样的:

    <script type="text/javascript">
        jQuery(document).ready(function($){       
            $(".selectmenu").scrollectBox({                           
                preset: 'dropdown',
                numVisibleOptions: 4,
                scrollInterval: 150, 
                scrollOn: 'hover',
                listWidth: 160,
                onSelectEvent: null
           });    
    
            $(".selectmenu").change(function() {
               var optionvalue = $("select.selectmenu").val(); 
             alert('Selected value ' + optionvalue);        
             });
    
         });
        </script>
    

    --------------已编辑--------- ------------

    脚本:

    <script>
        $(document).ready(function () {
               var selectEvent = function($el){
                alert("You chose " + $el.html());
                    return false;
                };
             $(".selectmenu").scrollectBox({                           
               preset: 'select',
                numVisibleOptions: 3,
                scrollOn: 'scroll',
                debug: true,
                onSelectEvent: selectEvent
    
             }); 
        });
    </script>
    

    HTML:

     <select name="selectmenu" class="selectmenu" >
            <option>Select The Language</option>
            <option value="en|af">Afrikaans</option>
            <option value="en|sq">Albanian</option>
     </select>
    

    PS:在本地主机上测试:)

    它不起作用,因为您有关于文档更改的警报,而不是在选择菜单更改中;)

    感谢。

    【讨论】:

    • 当懦夫没有坚定信念的勇气并且无法解释为什么他们 -1 答案时,我真的很烦。这没有什么问题,所以我要 +1 来取消愚蠢的 -1。
    • @Robert Rozas 这是一个意外的复制和粘贴错误。我一直在不断更改呼叫功能,而错误就在中间。我已经更新了我的问题。谢谢,
    • @Robert Rozas 我确定您编辑的代码必须返回选项文本,如Afrikaans,但不是选项值en|af 在警报中。我正在寻找一种方法来获取选项值,但主要不是文本,然后在选项更改时通过克隆的选择菜单传递它。谢谢,
    • 我尝试了所有组合...没有任何效果,因为选择它已转换为带有 ul 和 li 元素的 div ....a 找不到返回值而不是 html 的方法...我会再试一试,)
    【解决方案5】:

    你有一个额外的}) 右括号

      $(".selectmenu").scrollectBox({                           
        preset: 'dropdown',
        numVisibleOptions: 4,
        scrollInterval: 150, 
        scrollOn: 'hover',
        listWidth: 160,
        onSelectEvent: null
    });   
    }).change(function() {
    //^here..
       var optionvalue = $("select.selectmenu").val(); 
     alert('Selected value ' + optionvalue); 
    
     });
    

    应该是

     $(".selectmenu").scrollectBox({                           
        preset: 'dropdown',
        numVisibleOptions: 4,
        scrollInterval: 150, 
        scrollOn: 'hover',
        listWidth: 160,
        onSelectEvent: null
    
     }).change(function() {....
    

    【讨论】:

    • 这是一个意外的复制和粘贴错误。我一直在不断更改呼叫功能,而错误就在中间。我已经更新了我的问题。谢谢,
    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2023-03-28
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多