javascript - 迭代从数据库 Ruby/Javascript 检索的元素

标签 javascript jquery ruby ruby-on-rails-4 drag-and-drop

我正在处理这个问题,当然不知道如何解决。我可能选择了错误的方法,但让我再解释一下。某些信息正在从我的 SQLite 数据库中检索,此类信息用于在我的 DOM 中构建 div 结构。这个 div 结构代表商店中的一个项目,每个元素都应该附加一个操作,我使用一些 JS 来做到这一点。这是现在的样子:

HTML5:

<!-- Iterates over all activities retrieved from database -->

    <div class="row"  id="activity" draggable="true">
        <% @activities.each do |activity| %>

        <div class="large-4 small-6 columns">
            <div><%= image_tag activity.picture_url, :class => "img-style"%></div>

            <div class="panel img-panel" >
            <h5><%= activity.title %></h5>
            <h6 class="subheader"><%= activity.price %></h6>
                    </div>
        </div>

        <% end %>
    </div>

<!-- ends iteration -->

JS:

window.onload = function() {
   var activities = document.getElementById("activity");
   console.log('Length: '   + activities.length);

   var count = 0;
   for (act in activities) {
     var activity = activities[act];
     count++;
     console.log(count);

     activity.addEventListener('dragstart', activityDraggingStart, false);
     }

  function activityDraggingStart(e) {
        this.style.backgroundColor = 'blue';
  }
};

所以问题出在JS代码上:

  • 首先,length 返回一个未定义的值,因为它是一个对象,但它应该是一个数组,不是吗?

  • 其次,如果数据库只有 3 条记录,而我使用 count 变量,它会显示超过 200 条,这很尴尬,因为它应该只循环 3 次。

  • 最后但并非最不重要的一点是,我想向检索到的元素添加一个操作,因为我试图通过拖放功能来解决这个问题,但我不能,因为显然 Activity 是 DOM 的 NodeList元素,并且只有每个元素都有 addEventListener。

在这种特殊情况下应该做什么?最好的方法是什么?基本上我想要实现的目标是将事件监听器添加到我的“activity”div,以便在“dragstart”和“dragstop”事件发生时执行一些操作。

最佳答案

认为一个问题可能是您有多个具有相同 id 名称的元素。尝试将其更改为类。

我这样做的方法是循环遍历行并将 jquery ui 可拖动添加到每个行。

这是 fiddle 。

https://jsfiddle.net/0wnwt29j/1/

 $(function () {

     var numItems = $('.activity').length;
     $('#myspan').text('num of activities: ' + numItems);

     $(".row").each(function (index) {
         var myelement = $(this);
         myelement.draggable({
             start: function () {
                 myelement.addClass('blue');
             },
             stop: function () {
                 myelement.removeClass('blue');
             }
         });
     });


 });

关于javascript - 迭代从数据库 Ruby/Javascript 检索的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30158240/

相关文章:

javascript - 我可以使用 Javascript 检查仅 HTTP cookie 的存在吗?

javascript - 如何从输入文件控件中删除一个特定的选定文件

javascript - 如何在表单本身之外提交表单

javascript - 如何使用 Jquery 拆分多个字符串

javascript - 使用javascript的百分比计算器

javascript - 如何获取具有唯一值的对象数组?

javascript - ckeditor 响应 Dom 事件

ruby - Watir/ ruby : How to click on a text in dropdown in Ruby/Watir

ruby-on-rails - Rails 表单发布到/new 而不是/create?

ruby - 为什么 Ruby cross_product 返回的值与纸上的叉积不同