mobiscroll的setValue在后续打开jQM对话框时不起作用

时间:2014-06-20 17:18:32

标签: jquery ajax jquery-mobile jquery-ui-dialog mobiscroll

我的问题的简化版本位于github

我正在使用mobiscroll 2.6.2(因为这是github上的最后一个免费版本。后来版本高达2.11但存在不同的许可证。)

基本上,我有一个索引页面,它只能包含指向jQM对话框页面的链接。 dialog.html是jQM对话框页面,它有一个输入,mobiscroll库变成一个弹出式滚动条,用于选择数字。

mobiscroll有效。选择输入时会出现弹出式滚动条。我可以从滚动条中选择一个数字,然后用我的选择填充输入。所以我很确定我的mobiscroll初始化很好。我将在此重复一遍以便于审核:

        $('#mobiInput').mobiscroll()
             .scroller({
                theme: 'ios',
                mode: 'scroller',
                display: 'bubble',
                wheels: [ // Wheel groups array
                  [ // First wheel group
                    {
                      label: 'Number', 
                      values: ['9','8','7','6','5','4','3','2','1']
                    }
                  ]
                ],
                onSelect: function(valueText, inst) {
                }
            });

我正在尝试使用的功能是mobiscroll的setValue function

我将其设置为“2”的值。

var valueArray = ["2"];
$('#mobiInput').mobiscroll('setValue', valueArray, true);

这实际上有效...我第一次打开对话框页面。输入显示值2,当我弹出滚动条时,选择值2。

但是,当我关闭对话框(通过单击取消按钮,确定按钮或关闭图标)并重新打开对话框时,setValue函数似乎不起作用。值2不在输入中。当我弹出滚动条时,它默认为第一个值9。

我的猜测是,它不是mobiscroll中的错误,而是我对jQM ajax导航的误解。

1 个答案:

答案 0 :(得分:1)

问题是 Mobiscroll 样式表,每次打开对话框时都会加载JS库。虽然从DOM中删除了外部对话框,但不会删除与 Mobiscroll 相关的库。

  • 解决方案1:

    在索引/首页的<head>中加载与 Mobiscroll 相关的所有库以及初始化代码。

    <!-- index/first page -->
    <head>
       <!-- Mobiscroll style sheet -->
       <!-- MobiScroll JS library -->
       <script>
          $(document).on("pagecreate", "#dialogID", function () {
             /* initialize Mobiscroll and setValue */
          });
       </script>
    </head>
    
  • 解决方案2:

    在索引/首页的<head>中加载与 Mobiscroll 相关的所有库。对于初始化代码,将其放在 dialog div中。但是,您需要取消绑定pagecreate并再次绑定它。

    <!-- index/first page -->
    <head>
       <!-- Mobiscroll style sheet -->
       <!-- MobiScroll JS library -->
    </head>
    
    <!-- external dialog -->
    <div data-role="page" id="dialogID" data-dialog="true">
       <script>
          $(document).off("pagecreate", "#dialogID").on("pagecreate", "#dialogID", function () {
             /* initialize Mobiscroll and setValue */
          });
       </script>
    </div>
    
  

<强> Demo