【问题标题】:Jquery UI - Sortable[Portlet] - button double clickJquery UI - 可排序[Portlet] - 按钮双击
【发布时间】:2011-11-20 10:02:00
【问题描述】:

我对 Jquery UI - 可排序组件有疑问。 问题说明:

  • 点击按钮1 -> 结果“警报”
  • 将包含 button1 的 portlet 拖到另一列,然后单击 button1 -> 结果“alert”“alert”(每个事件触发两次 click 函数表示的动作)

简单代码(来自 Jquery UI 网页的修改 portlet 示例):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>jQuery UI Sortable - Portlets</title>
    <link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
    <script src="../../jquery-1.6.2.js"></script>
    <script src="../../ui/jquery.ui.core.js"></script>
    <script src="../../ui/jquery.ui.widget.js"></script>
    <script src="../../ui/jquery.ui.mouse.js"></script>
    <script src="../../ui/jquery.ui.sortable.js"></script>
    <script src="../../ui/jquery.ui.button.js"></script>
    <link rel="stylesheet" href="../demos.css">
    <style>
    .column { width: 170px; float: left; padding-bottom: 100px; }
    .portlet { margin: 0 1em 1em 0; }
    .portlet-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; }
    .portlet-header .ui-icon { float: right; }
    .portlet-content { padding: 0.4em; }
    .ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; height: 50px !important; }
    .ui-sortable-placeholder * { visibility: hidden; }
    </style>
    <script>
    $(function() {
        $( ".column" ).sortable({
            connectWith: ".column"
        });

        $( ".portlet" ).addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
            .find( ".portlet-header" )
                .addClass( "ui-widget-header ui-corner-all" )
                .prepend( "<span class='ui-icon ui-icon-minusthick'></span>")
                .end()
            .find( ".portlet-content" );

        $( ".portlet-header .ui-icon" ).click(function() {
            $( this ).toggleClass( "ui-icon-minusthick" ).toggleClass( "ui-icon-plusthick" );
            $( this ).parents( ".portlet:first" ).find( ".portlet-content" ).toggle();
        });

        $( ".column" ).disableSelection();
    });
    </script>
</head>
<body>
<div class="demo">

<div class="column">

    <div class="portlet">
        <div class="portlet-header">Feeds</div>
        <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
        <div>
            <div id="button1"></div>
        </div>
        <script>
                                $( "#button1" ).button({
                                    icons: {
                                        primary: "ui-icon-locked"
                                    },
                                    label: 'Button1'
                                }).click(function(){
                                    alert('Alert');
                                });
        </script>
    </div>

    <div class="portlet">
        <div class="portlet-header">News</div>
        <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
    </div>

</div>

<div class="column">

    <div class="portlet">
        <div class="portlet-header">Shopping</div>
        <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
    </div>

</div>

<div class="column">

    <div class="portlet">
        <div class="portlet-header">Links</div>
        <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
    </div>

    <div class="portlet">
        <div class="portlet-header">Images</div>
        <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
    </div>

</div>

</div><!-- End demo -->



<div class="demo-description">
<p>
    Enable portlets (styled divs) as sortables and use the <code>connectWith</code>
    option to allow sorting between columns.
</p>
</div><!-- End demo-description -->

</body>
</html>

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-ui-sortable


    【解决方案1】:

    问题是您将 click 函数绑定到 portlet 本身的 html 中的 button1,因此当 jQuery UI 克隆一个帮助对象时,它可能会第二次执行。解决方案很简单,只需将 Feeds portlet 的脚本元素中的代码移动到页面头部的脚本部分(在函数体中,就像由就绪处理程序执行的其他代码一样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2018-01-11
      • 2014-01-08
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多