jquery - 新附加的元素无法拖动

标签 jquery jquery-ui

我正在创建一个简单的表单生成器来使用 jQueryUI。我有一个表单元素列表,就像图像一样,我将其设置为可拖动,设置为助手“克隆”。我还有一个可放置区域,我在其中设置了放置事件来读取放置图像的 id 并创建适当的表单元素并将其附加到可放置区域。添加新元素后,我将其设置为可拖动。问题是,尽管新元素具有 ui-draggable 类,但一旦调用了draggable,它们就不可拖动。我希望能够在创建它们后拖动它们。

代码如下:-

var itemCount = 1;
var idToAdd;
var itemToAdd;

$(document).ready(function(){
    $(".draggable").draggable({
        opacity:0.5,
        helper: "clone"
    });

     $(".form_builder").droppable(
        {
                activeClass: "droppable_dragged",
                drop: function(e, ui){
                    var dropped_item = ui.draggable;
                    switch($(dropped_item).attr("id")){
                        case "text_box":
                            idToAdd = "textBox" + itemCount;
                            itemToAdd = "<input id='" + idToAdd + "' type='text' />";
                            break;
                        case "text_area":

                            break;
                        case "radio":
                            idToAdd = "radio" + itemCount;
                            itemToAdd = "<input id='" + idToAdd + "' type='radio' />";
                            break;
                        case "check":
                            idToAdd = "check" + itemCount;
                            itemToAdd = "<input id='" + idToAdd + "' type='check' />";
                            break;
                        case "dropdown":

                            break;
                        case "file":
                            idToAdd = "file" + itemCount;
                            itemToAdd = "<input id='" + idToAdd + "' type='file' />";
                            break;
                        case "button":
                            idToAdd = "button" + itemCount;
                            itemToAdd = "<input id='" + idToAdd + "' type='submit' />";
                            break;
                    }
                    itemCount++;
                    $(this).append(itemToAdd);
                    $("#" + idToAdd).draggable();
                }

            });
});

最佳答案

更新它不起作用的原因是输入以某种方式干扰了拖动事件。这与它被丢弃的事实无关。我已经向元素添加了填充,现在,拖动填充,它可以工作:http://jsfiddle.net/7HUt2/4/

  1. 尝试限制变量的范围:

    drop: function(e, ui){
       var itemToAdd;
       ...
    }
    

    这将确保没有其他同时发生的事件会破坏您的程序流程。

  2. 如果可以直接引用对象,请避免查找它们:

    itemToAdd = '<input type="..."/>'; //No id necessary at this point.   
    $(itemToAdd).appendTo(this).draggable();
    

这将使其更加强大

关于jquery - 新附加的元素无法拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10018738/

相关文章:

JQuery slideDown 无法按预期工作

javascript - 在 Mustache.js 模板中使用时,Rateit 插件不起作用

php - 无需刷新的 Ajax 发布

jQuery 在选择复选框时更改表格行的背景颜色

css - jQuery UI 对话框的自定义样式

Jquery - 自己的jquery ui堆栈函数

jquery - 如何更改 jquery 日期选择器的单元格颜色

javascript - 购物车 block 未更新 codeigniter

jquery - 使用 JQuery 处理动态字段时 Grails 表单提交失败

javascript - CSS 并没有通过在 HTML 中调用 JS 来改变