【问题标题】:how to use draggable on javascript appended fields?如何在 javascript 附加字段上使用可拖动?
【发布时间】:2017-03-10 12:19:05
【问题描述】:

我正在使用 Jquery 可拖动来创建创建输入的应用程序的一部分,输入必须是可拖动的,在下面的项目(jsfiddle)中,您会看到只有创建的字段不可拖动,但一个直接加在html里的作品为什么?

https://jsfiddle.net/vtsjwb63/

html:

<div class="input_fields_wrap">
    <button class="add_field_button">Add More Fields</button>

    <div class="draggable ui-widget-content">
         <input type="text" name="mytext[]"/>
         <a href="#" class="remove_field">x</a>
    </div>
</div>

javascript:

$(document).ready(function() {
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x++; //text box increment
            $(wrapper).append(''
            + '<div class="draggable ui-widget-content added">'
            + '<p>not draggable anymore, why ?</p>'
            + '<input type="text" name="mytext[]"/>'
            + '<a href="#" class="remove_field">x</a>'
            + '</div>'
            ); //add input box
        }
    });

    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
    $( ".draggable" ).draggable({ grid: [ 5, 5 ], snap: true });
});

我该如何解决这个问题?

【问题讨论】:

    标签: jquery html draggable jquery-ui-draggable


    【解决方案1】:

    问题是因为您仅在页面加载时在 DOM 中的元素上实例化 draggable()。要使新元素可拖动,您需要在将它们附加到 DOM 后对它们调用 draggable。试试这个:

    var max_fields = 10; // maximum input boxes allowed
    var wrapper = $(".input_fields_wrap"); 
    var add_button = $(".add_field_button");
    var draggableOptions = { grid: [ 5, 5 ], snap: true }   
    
    $(add_button).click(function(e) {
      e.preventDefault();
      if (wrapper.find('.draggable').length < max_fields) {
        $('<div class="draggable ui-widget-content added">'
          + '<p>not draggable anymore, why ?</p>'
          + '<input type="text" name="mytext[]"/>'
          + '<a href="#" class="remove_field">x</a>'
          + '</div>').appendTo(wrapper).draggable(draggableOptions); // < important change here
      }
    });
    
    $(wrapper).on("click", ".remove_field", function(e) {
      e.preventDefault();  
      $(this).parent('div').remove();
    })
    $(".draggable").draggable(draggableOptions);
    

    Working example

    【讨论】:

      【解决方案2】:

      您需要做的就是将点击事件与可拖动事件相关联。

       $(document).ready(function() {
              var max_fields      = 10; //maximum input boxes allowed
              var wrapper         = $(".input_fields_wrap"); //Fields wrapper
              var add_button      = $(".add_field_button"); //Add button ID
             
              var x = 1; //initlal text box count
              $(add_button).click(function(e){ //on add input button click
                  e.preventDefault();
                  if(x < max_fields){ //max input box allowed
                      x++; //text box increment
                      $(wrapper).append(''
                      + '<div class="draggable ui-widget-content added">'
                      + '<p>not draggable anymore, why ?</p>'
                      + '<input type="text" name="mytext[]"/>'
                      + '<a href="#" class="remove_field">x</a>'
                      + '</div>'
                      ); //add input box
                  }
              });
             
              $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
                  e.preventDefault(); $(this).parent('div').remove(); x--;
              })
              
              $('.add_field_button').click(function(){ 
              $( ".draggable" ).draggable({ grid: [ 5, 5 ], snap: true });
          });
          })
      .draggable {padding:30px; background:red; width:200px; cursor:pointer;}
      .added {background:yellow;}
         
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script
        src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"
        integrity="sha256-0YPKAwZP7Mp3ALMRVB2i8GXeEndvCq3eSl/WsAl1Ryk="
        crossorigin="anonymous"></script>
      <div class="input_fields_wrap">
          <button class="add_field_button">Add More Fields</button>
                  <div class="draggable ui-widget-content">
                  <input type="text" name="mytext[]"/>
                  <a href="#" class="remove_field">x</a>
                  </div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-07
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 2018-06-19
        相关资源
        最近更新 更多