【问题标题】:JQuery Mobile how to enable a collapsible set to drag and dropJQuery Mobile 如何启用可折叠集拖放
【发布时间】:2016-11-25 12:58:03
【问题描述】:

我尝试使用可折叠集而不是列表视图来使以下演示工作,但我无法这样做:

http://forresst.github.io/2012/06/22/Make-a-list-jQuery-Mobile-sortable-by-drag-and-drop/

一旦可折叠集成为可排序的,折叠功能就会被破坏。

我正在使用:

JQuery Mobile 1.4.5

jQuery 1.11.0

JQuery-UI 1.11.4

科尔多瓦 6.3.0

我正在 Android (SGS4) 上对此进行测试

HTML:

<script type="text/javascript" src="lib/jquery/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="lib/jqm/jquery.mobile-1.4.5.min.js"></script>
<script type="text/javascript" src="lib/jquery-ui/jquery-ui.min.js"></script>
<script type="text/javascript" src="lib/jquery-ui/jquery-ui.touch-punch.min.js"></script>

<div data-role="page" id="test">

    <div role="main" class="ui-content">

        <div data-role="collapsibleset" data-theme="a" data-content-theme="a" class="sortable">
            <div data-role="collapsible">
                <h3>Section 1</h3>
            <p>I'm the collapsible content for section 1</p>
            </div>
            <div data-role="collapsible">
                <h3>Section 2</h3>
            <p>I'm the collapsible content for section 2</p>
            </div>
            <div data-role="collapsible">
                <h3>Section 3</h3>
            <p>I'm the collapsible content for section 3</p>
            </div>
        </div>

    </div><!-- /content -->

</div><!-- /test page -->

JavaScript:

        $(document).on("pageshow","#test",function(){

            $( ".sortable" ).sortable();
            $( ".sortable" ).disableSelection();
            /// Refresh list to the end of sort to have a correct display
            $( ".sortable" ).bind( "sortstop", function(event, ui) {
                $('.sortable').collapsibleset('refresh');
//                $('.sortable').listview('refresh');
            });
        });

【问题讨论】:

    标签: javascript android jquery cordova jquery-mobile


    【解决方案1】:

    pageshow 事件未触发。通过以下代码,它运行良好。

    HTML 代码:

    <html> 
        <head>
            <title>Drag and Drop</title>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="http://code.jquery.com/mobile/git/jquery.mobile-git.css">
            <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
            <script src="http://code.jquery.com/mobile/git/jquery.mobile-git.js"></script>
            <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>
        </head>
    
        <body>
          <div data-role="page" id="test">
    
        <div role="main" class="ui-content">
    
            <div data-role="collapsibleset" data-theme="a" data-content-theme="a" class="sortable">
                <div data-role="collapsible">
                    <h3>Section 1</h3>
                <p>I'm the collapsible content for section 1</p>
                </div>
                <div data-role="collapsible">
                    <h3>Section 2</h3>
                <p>I'm the collapsible content for section 2</p>
                </div>
                <div data-role="collapsible">
                    <h3>Section 3</h3>
                <p>I'm the collapsible content for section 3</p>
                </div>
            </div>
    
        </div><!-- /content -->
    </div><!-- /test page -->
        </body>
    </html>
    

    js代码:

    $(document).ready(function(){
    
                $(".sortable").sortable();
                $(".sortable").disableSelection();
                /// Refresh list to the end of sort to have a correct display
                $(".sortable").bind( "sortstop", function(event, ui) {
                    $('.sortable').collapsibleset('refresh');
    //                $('.sortable').listview('refresh');
                });
            });
    

    【讨论】:

    • 感谢您的回复 Naresh,但这仍然不起作用。导入 touch-punch 脚本后,可折叠 div 不再折叠和展开。 Pageshow 对我来说效果很好。这是一个cordova项目,可能会影响它吗?
    • 我没有在cordova中检查它,我已经在浏览器中检查它工作正常@ModusPwnens
    • 这就是为什么 pageshow 不适合你,pageshow 适合我。感谢您的尝试。
    【解决方案2】:

    我希望这会帮助其他人。我无法让可折叠的集合在cordova中与拖放功能一起正常工作,所以我想出了一种不同的方法。我只是在可折叠标题上放置了按钮,以便它们可以向上或向下移动。代码如下:

    HTML:

    <!DOCTYPE html>
    <html>
    <head>  
        <title>Test</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
    
        <link href="css/app.css" rel="stylesheet" >
        <link href="lib/jquery-ui/jquery-ui.min.css" rel="stylesheet" />
        <link href="lib/jquery-ui/jquery-ui.structure.min.css" rel="stylesheet" />
        <link href="lib/jquery-ui/jquery-ui.theme.min.css" rel="stylesheet" />
        <link href="lib/jqm/jquery.mobile.structure-1.4.5.min.css" rel="stylesheet" />
        <link href="lib/jqm/jquery.mobile-1.4.5.min.css" rel="stylesheet" />
    
        <script type="text/javascript" src="lib/jquery/jquery-1.11.0.min.js"></script>
        <script type="text/javascript" src="lib/jqm/jquery.mobile-1.4.5.min.js"></script>
        <script type="text/javascript" src="lib/jquery-ui/jquery-ui.min.js"></script>
        <script type="text/javascript" src="lib/jsignature/jSignature.min.js"></script>
    
    </head>
    
    <body>
    <div data-role="page" id="test">
    
        <div role="main" class="ui-content">
    
            <div data-role="collapsibleset" data-theme="a" data-content-theme="a" class="sortable ui-collapsible-set ui-group-theme-a ui-corner-all" data-enhanced="true">
    
                <div data-role="collapsible" id="collapsible-1" class="ui-collapsible ui-collapsible-inset ui-corner-all ui-collapsible-themed-content ui-collapsible-collapsed" data-enhanced="true">
                    <h3 class="ui-collapsible-heading ui-collapsible-heading-collapsed">
                        <a href="#" class="ui-collapsible-heading-toggle ui-btn ui-icon-plus ui-btn-icon-left ui-btn-a">Section 1<span class="ui-collapsible-heading-status"> click to expand contents</span>
                        </a>
                        <span class="span-move-up">
                            <a href="#" data-icon="arrow-u" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-up circular-btn ui-icon-arrow-u">
                                <span class="ui-icon-arrow-u ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                        <span class="span-move-down">
                            <a href="#" data-icon="arrow-d" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-down circular-btn ui-icon-arrow-d">
                                <span class="ui-icon-arrow-d ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                    </h3>
                    <div class="ui-collapsible-content ui-body-a ui-collapsible-content-collapsed" aria-hidden="true">
                        <p>I'm the collapsible content for section 1</p>
                    </div>
                </div>
    
                <div data-role="collapsible" id="collapsible-2" class="ui-collapsible ui-collapsible-inset ui-corner-all ui-collapsible-themed-content ui-collapsible-collapsed" data-enhanced="true">
                    <h3 class="ui-collapsible-heading ui-collapsible-heading-collapsed">
                        <a href="#" class="ui-collapsible-heading-toggle ui-btn ui-icon-plus ui-btn-icon-left ui-btn-a">Section 2<span class="ui-collapsible-heading-status"> click to expand contents</span>
                        </a>
                        <span class="span-move-up">
                            <a href="#" data-icon="arrow-u" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-up circular-btn ui-icon-arrow-u">
                                <span class="ui-icon-arrow-u ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                        <span class="span-move-down">
                            <a href="#" data-icon="arrow-d" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-down circular-btn ui-icon-arrow-d">
                                <span class="ui-icon-arrow-d ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                    </h3>
                    <div class="ui-collapsible-content ui-body-a ui-collapsible-content-collapsed" aria-hidden="true">
                        <p>I'm the collapsible content for section 2</p>
                    </div>
                </div>
    
                <div data-role="collapsible" id="collapsible-3" class="ui-collapsible ui-collapsible-inset ui-corner-all ui-collapsible-themed-content ui-collapsible-collapsed" data-enhanced="true">
                    <h3 class="ui-collapsible-heading ui-collapsible-heading-collapsed">
                        <a href="#" class="ui-collapsible-heading-toggle ui-btn ui-icon-plus ui-btn-icon-left ui-btn-a">Section 3<span class="ui-collapsible-heading-status"> click to expand contents</span>
                        </a>
                        <span class="span-move-up">
                            <a href="#" data-icon="arrow-u" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-up circular-btn ui-icon-arrow-u">
                                <span class="ui-icon-arrow-u ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                        <span class="span-move-down">
                            <a href="#" data-icon="arrow-d" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-down circular-btn ui-icon-arrow-d">
                                <span class="ui-icon-arrow-d ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                    </h3>
                    <div class="ui-collapsible-content ui-body-a ui-collapsible-content-collapsed" aria-hidden="true">
                        <p>I'm the collapsible content for section 3</p>
                    </div>
                </div>
    
                <div data-role="collapsible" id="collapsible-4" class="ui-collapsible ui-collapsible-inset ui-corner-all ui-collapsible-themed-content ui-collapsible-collapsed" data-enhanced="true">
                    <h3 class="ui-collapsible-heading ui-collapsible-heading-collapsed">
                        <a href="#" class="ui-collapsible-heading-toggle ui-btn ui-icon-plus ui-btn-icon-left ui-btn-a">Section 4<span class="ui-collapsible-heading-status"> click to expand contents</span>
                        </a>
                        <span class="span-move-up">
                            <a href="#" data-icon="arrow-u" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-up circular-btn ui-icon-arrow-u">
                                <span class="ui-icon-arrow-u ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                        <span class="span-move-down">
                            <a href="#" data-icon="arrow-d" data-iconpos="notext" data-theme="c" data-inline="true" data-corners="true" class="move-collapsible-down circular-btn ui-icon-arrow-d">
                                <span class="ui-icon-arrow-d ui-btn-icon-right" style="float: right;"></span>
                            </a>
                        </span>
                    </h3>
                    <div class="ui-collapsible-content ui-body-a ui-collapsible-content-collapsed" aria-hidden="true">
                        <p>I'm the collapsible content for section 4</p>
                    </div>
                </div>
    
            </div>
    
        </div><!-- /content -->
    
    </div><!-- /test page -->
    </body>
    

    CSS:

    .circular-btn {
        width: 40px !important;
        height: 40px !important;
        border-radius: 50% !important;
        padding: 0px !important;
        margin: 0px !important;
    }
    
    .circular-btn span span {
        height: 100px !important;  
        line-height: 70px;
    }
    
    .span-move-up {
        position: relative;
        z-index: 10;
        float: right;
        top: -22px;
        left: -40px;
    }
    

    JavaScript:

    $('.move-collapsible-up').on('tap',function(event) {
        event.stopPropagation();
        event.preventDefault();
    
        var currCollapseElem = $(this).parent().parent().parent();
        var prevCollapseElem = currCollapseElem.prev('div');
    
        /// detach and attach the add button
        currCollapseElem.insertBefore(prevCollapseElem);
    
        $('.sortable').collapsibleset('refresh');
    });
    
    $('.move-collapsible-down').on('tap',function(event) {
        event.stopPropagation();
        event.preventDefault();
    
        var currCollapseElem = $(this).parent().parent().parent();
        var nextCollapseElem = currCollapseElem.next('div');
    
        /// detach and attach the add button
        currCollapseElem.insertAfter(nextCollapseElem);
    
        $('.sortable').collapsibleset('refresh');
    });
    

    再次,我希望这对某人有所帮助。如果我的代码有任何问题,请随时发表评论。

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多