拖放:仅在刷新时有效

伊娃

我正在尝试在我的网站中使用HTML5拖放。dragstart和dragend被触发,但是dragenter,dragleave,dragover和drop在刷新页面之前不起作用。

拖放问题

边栏中的树中的节点应能够拖到表中的单元格。这棵树是用jsTree制成的我已经在Firefox,Chrome和IE上进行过尝试。它们都有相同的行为。

侧边栏树(rhtml文件)

<section id="navbar-jstree">
</section>

<script>
  $(function () {
    $('#navbar-jstree')
      .on('select_node.jstree', loadDetails)
      .on('after_open.jstree', addAttributes)
      .jstree({ 
      'core' : {
        'data' : { 
          'url' : function (node) {
            return node.id === '#' ?
              '/nav_trees.json' :
              '/nav_trees/' + node.id + '.json';
          },
          'data' : function (node) {
            return {'id': node.id};
          }
        },
        'themes' : {"dots" : false}
      },
      'plugins' : ['types'] 
    });
    
    function addAttributes(e, data) {
      $('#' + data.node.id + ' ul > li').each(function(idx, elem) {
        var node = $(elem);
        var node_id = node.attr('id') % 1e8;
        if (isItem(node_id)) {
          node
            .attr('draggable', 'true')
            .on('dragstart', function(e){
              $(this).addClass('dragged');
              e.originalEvent.dataTransfer.effectAllowed = 'copy';
              var nodeData = { name: $(this).text(), id: $(this).attr('id') };
              e.originalEvent.dataTransfer.setData('text/plain', JSON.stringify(nodeData));
          }).on('dragend', function(e) {
              $(this).removeClass('dragged');
          });
        }
      });
    }
  });
</script>

放下动作代码(咖啡文件)

$ ->
    $.event.props.push 'dataTransfer'
    
    handleDragEnter = -> $(this).addClass 'droppable'
    handleDragLeave = -> $(this).removeClass 'droppable'
    handleDragOver = (e) ->
        e.preventDefault()
        e.originalEvent.dataTransfer.dropEffect = 'copy'
        false
    handleDrop = (e) ->
        e.stopPropagation()
        e.preventDefault()
        $(this).removeClass 'droppable'
        nodeDataStr = e.dataTransfer.getData 'text/plain'
        nodeData = JSON.parse nodeDataStr
        column = $(this).index() + 1
        data =
            text: nodeData.name
            node_id: nodeData.id
            start: $('.scheduler .th:nth-child(' + column + ')').text()
            user_id: $(this).parents('.scheduler-row').prev().data('id')
        $.post '/events', data
        false
    
    $('.scheduler-row td')
        .on('dragenter', handleDragEnter)
        .on('dragover', handleDragOver)
        .on('dragleave', handleDragLeave)
        .on('drop', handleDrop)

表格(页面来源)

<div class="scheduler table">
    <div class="thead">
      <div class="tr">
        <div class="th">2014-06-09</div>
        <div class="th">2014-06-16</div>
        <div class="th">2014-06-23</div>
        <div class="th">2014-06-30</div>
        <div class="th">2014-07-07</div>
        <div class="th">2014-07-14</div>
        <div class="th">2014-07-21</div>
      </div>
    </div>
    <table cellspacing="0">
      <tbody>
        <tr>
          <th scope="row" data-id="1">Eva Ogbe</th>
          <td class="scheduler-row">
            <table class="table" cellspacing="0">
              <tbody>
                <tr>
                  <td class=""></td><td></td><td></td><td></td><td></td><td></td><td></td>
                </tr>
              </tbody>
            </table>
          </td>
        </tr>
      </tbody>
    </table>
  </div>

我试图做一个小提琴,但是效果很好。

如何在无需刷新的情况下使放置动作起作用?

伊娃

进行了更多挖掘。原来问题出在我的coffeescript上,因为turbolinks无法加载。解决方案是将文档准备事件绑定到像这样页面的变化:

ready = ->
    $.event.props.push 'dataTransfer'
    # ...snip remainder of function...

$(document).on 'page:change', ready

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

拖放:拖放仅在刷新时有效

来自分类Dev

提取仅在刷新时有效

来自分类Dev

灰烬加载模板仅在页面刷新时有效

来自分类Dev

仅在调试javascript时有效

来自分类Dev

基于路由切换App.js中的组件,仅在刷新时有效

来自分类Dev

JS仅在刷新页面几次时有效

来自分类Dev

jQuery仅在刷新页面以切换Rails应用程序时有效

来自分类Dev

WKNavigationDelegate仅在设置为self时有效

来自分类Dev

AngularJS代码仅在ng-app =“”时有效

来自分类Dev

EventBus仅在放入Handler时有效

来自分类Dev

CSS:hover仅在鼠标移动时有效

来自分类Dev

流星仅在以调试模式部署时有效

来自分类Dev

推送通知仅在注销时有效

来自分类Dev

图像RotateFlip仅在直接调用时有效

来自分类Dev

DoCmd.OutputTo仅在中断时有效

来自分类Dev

不透明褪色仅在延迟时有效

来自分类Dev

状态还原仅在连接到Xcode时有效

来自分类Dev

Vuetify输入颜色属性仅在聚焦时有效

来自分类Dev

.on('click',function(){})仅在首次点击时有效

来自分类Dev

scrollTop按钮仅在首次点击时有效

来自分类Dev

按钮功能仅在首次单击时有效

来自分类Dev

片段内的MapFragment仅在旋转时有效

来自分类Dev

jQuery Ajax调用仅在首页加载时有效

来自分类Dev

该程序仅在声明整数时有效

来自分类Dev

图像RotateFlip仅在直接调用时有效

来自分类Dev

VBS文件仅在双击时有效

来自分类Dev

推送通知仅在注销时有效

来自分类Dev

jQuery单击仅在双击时有效

来自分类Dev

可遏制的行为仅在本地时有效