【问题标题】:jQuery .on('click') does not work with jQuery UI draggablejQuery .on('click') 不适用于可拖动的 jQuery UI
【发布时间】:2013-05-16 03:57:05
【问题描述】:

我有一个关于 jQuery 的问题。我真的是 jQuery 的新手,甚至是 javascript,所以请多多包涵。

我在我的应用程序的一些 div 上使用可拖动的 jQuery UI。问题是,jQuery .on('click') 似乎不适用于这些 div。我确实尝试使用 .click() 并且它确实有效。但是,将动态创建 div,根据我所学到的,当我们想要使用动态创建的元素时,最好使用 .on() 。下面是我的 HTML sn-p:

<div class="book-page">
    <div class="draggable-text">
        <p>First text</p>
    </div>
    <div class="draggable-text">
        <p>Second text</p>
    </div>
</div>

这里是 jQuery sn-p:

$('div.draggable-text').draggable({
    cursor: 'move',
    delay: 200,
    containment: 'parent'
}).resizable().selectable();

// This one doesn't work
$('div.book-page').on('click', 'div.book-page > div.draggable-text', function () {
    alert('clicked!');
    // some more coding here...
});

// This one works
/*$('div.book-page > div.draggable-text').click(function () {
    alert('clicked!');
    // some more coding here...
});*/

最后,这是我创建的a link to a jsfiddle。我非常感谢任何形式的帮助。

谢谢!抱歉英语不好。

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-draggable jquery-on


    【解决方案1】:

    看起来你的第二个语法错误。

    试试这个:

    $('div.draggable-text').on('click', function () {
      alert('clicked!');
      // some more coding here...
    });
    

    阅读 jQuery 'on' 事件的语法以更好地理解参数的含义。 http://api.jquery.com/on/

    干杯!

    【讨论】:

    • 好吧,我刚刚重新测试了一遍。您的答案适用于已经创建的元素。但它不适用于动态创建的元素。它需要一些调整>>$('div.book-page').on('click', 'div.draggable-text', function () { 参见my js fiddle。无论如何,感谢您的回答(并阅读文档),我可以解决我的问题!
    • 发生这种情况的原因是由于某种原因,当使用containment: 'parent'时,父级将停止点击事件传播。你找到解决办法了吗?和你一样,重要的是我委托事件而不是将它们直接附加到元素。
    【解决方案2】:

    试试这个:

    $('div.draggable-text').click(function(e){
    e.preventDefault();
        alert('test');
    });
    

    【讨论】:

      【解决方案3】:

      如果你想将点击事件绑定到动态创建的可拖动元素,你的第一个想法几乎是正确的。

      这是一个固定的代码:http://jsfiddle.net/G75qs/3/

      $('.draggable-text').draggable({
          cursor: 'move',
          delay: 200,
          containment: 'parent'
      }).resizable().selectable();
      
      //Bind click event for all element with class .draggable-text including 
      //elements dynamically created
      $('.book-page').on('click', '.draggable-text', function () {
          alert('clicked!');
          // some more coding here...
      });
      

      【讨论】:

        【解决方案4】:

        Jquery 语法不正确试试这个:

        $('div.draggable-text').on('click', function () {
        alert('clicked......');
        // some coding here...
        });
        

        在这里查看:http://jsfiddle.net/jS8sK/2/

        【讨论】:

          【解决方案5】:

          对于动态创建的 Div,最好将 .live 用于事件。

          $('div.draggable-text').die('click').live('click', function () {
          alert('clicked......');
          

          【讨论】:

          猜你喜欢
          • 2013-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-02
          • 1970-01-01
          • 2012-11-07
          • 2013-11-19
          • 1970-01-01
          相关资源
          最近更新 更多