2016-05-17 101 views
3

我目前正在开发一个项目,我必须开发一个允许在数据库中操作表的WordPress插件。我的工作是基于这个插件,我正在改进和编辑,以匹配我公司的要求:https://wordpress.org/plugins/create-db-tables/动态添加HTML取决于动态生成的HTML与jQuery

然而,我的问题不关心MySQL,但HTML,PHP和jQuery(特别是jQuery,根本不熟悉)。它是关于动态生成一个表单的,它本身取决于一个动态生成的表单(是啊......)。

使用以下代码,插件用户可以动态地将行添加到他创建的表中。我希望他能够加入“亚行”(我知道如何处理它的服务器端,在这里我的问题是只有接口),这样的:

http://i.imgur.com/XHwI54W.png

用户点击时“添加亚行”,一个区域出现在他可以填写表格的地方等等。它对第一行非常完美(至少是界面),但在此之后,无论何时点击另一个“添加亚行”按钮,都不会发生任何事情。

如果有人能花时间告诉我我做错了什么,我将非常感激。非常感谢 ! :)

这里是我的代码: (第一jQuery脚本看似工作,我不是谁开发它的人我复制它,并努力去适应,第二个我的“分列”的规定)

<form id="create-table" method="post" action="<?php echo admin_url('admin-post.php'); ?>"> 

     <input type="hidden" name="action" value="add_table"> 

     <fieldset class="table-fieldset"> 
      <label id="table-name">Table Name:</label> <br /> 
      <span style="position: relative; top: 2px;"><?php echo "Choose prefix (by default wp_) : " ?></span><input type="text" class="prefix-name" name="prefix_name" size="4" id="prefix-name"><br /> 
      <span style="position: relative; top: 2px;"><?php echo "Choose table name :" ?></span><input type="text" class="table-name" name="table_name" size="30" id="table-name"> 
      <span>(Alphanumeric only, no special characters.)</span> <br/> <br/> 
      <span><font color="blue"><strong>Will this table be used for user authentication ? </strong></font></span><input type="checkbox" class="is-user-auth" name="is_user_auth" id="is-user-auth"><br/> 
      <span><strong>/!\ Only one table at a time can be used for user authentication : if a current table is used for this purpose, it won't be anymore.</strong></span><br/><br/> 
     </fieldset> 

     <div id="rows"> 
      <fieldset class="row-fieldset" id="row-fieldset" value="1"><label id="row-label">Row:</label><input type="text" class="name-input" name="name[]" placeholder="Name" size="20"><input type="text" class="type-input" name="type[]" placeholder="Type [Ex: bigint(20)]" size="20"><span id="null-label">Null</span><input type="checkbox" class="null-input" name="null[]"><input type="text" class="default-input" name="default[]" placeholder="Default Value" size="20"><span id="unique-label">Unique</span><input type="checkbox" class="unique-input" name="unique[]"><button type="button" class="row-dynamic" style="background-color: #E3F6CE">Add subrows</button><div id="subrows1" value="1"></div></fieldset> 
     </div> 

     <div id="add-row"> 
      <button type="button" class="add-row button-secondary">Add Row</button> 
     </div> 

     <fieldset> 
      <input type="hidden" id="items" name="items" value="1" /> 
     </fieldset> 

     <fieldset> 
      <input type="hidden" id="subrowitems" name="subrowitems" value="101" /> 
     </fieldset> 

     <fieldset> 
      <button type="submit" class="button button-primary button-large">Create Table</button> 
     </fieldset> 

    </form> 

    <!-- Script to add rows --> 
    <script> 
     jQuery(function($) { 
      $('.add-row').click(function() { 
       $('#items').val(function(i, val) { return +val+1 }); 
       var val_2=$('#items').attr('value'); 
       var subrow_name = 'subrows'+val_2; 
       var rowHTML = '<fieldset class="row-fieldset" id="row-fieldset" value=\"'+val_2+'\"><label id="row-label">Row:</label><input type="text" class="name-input" name="name[]" placeholder="Name" size="20"><input type="text" class="type-input" name="type[]" placeholder="Type [Ex: bigint(20)]" size="20"><span id="null-label">Null</span><input type="checkbox" class="null-input" name="null[]"><input type="text" class="default-input" name="default[]" placeholder="Default Value" size="20"><span id="unique-label">Unique</span><input type="checkbox" class="unique-input" name="unique[]"><button type="button" class="row-dynamic" style="background-color: #E3F6CE">Add subrows</button><div id=\"'+subrow_name+'\" value=' + val_2 + '></div></fieldset>'; 
       $('#rows').append(rowHTML); 
      }); 
      $("input.name-input").on({ 
       keydown: function(e) { 
        if (e.which === 32) 
         return false; 
       }, 
       change: function() { 
        this.value = this.value.replace(/\s/g, ""); 
       } 
      }); 
      $("input.table-name").on({ 
       keydown: function(e) { 
        if (e.which === 32) 
         return false; 
       }, 
       change: function() { 
        this.value = this.value.replace(/\s/g, ""); 
       } 
      }); 
     }); 
    </script> 

    <!-- Script to add subrows --> 
    <script> 
     jQuery(function($) { 
      $('.row-dynamic').click(function() { 
       $('#subrowitems').val(function(i, val) { return +val+1 }); 
       var val_3=$('#subrowitems').attr('value'); 
       var subrowHTML = '<fieldset class="subrow-fieldset" value=\"' +val_3+ '\"><label id="subrow-label">Subrow:</label><input type="text" class="subrow-name-input" name="name[]" placeholder="Name" size="20" style="background-color: #E3F6CE"><input type="text" class="subrow-type-input" name="type[]" placeholder="Type [Ex: bigint(20)]" size="20" style="background-color: #E3F6CE"><span id="subrow-null-label">Null</span><input type="checkbox" class="subrow-null-input" name="null[]" style="background-color: #E3F6CE"><input type="text" class="subrow-default-input" name="default[]" placeholder="Default Value" size="20" style="background-color: #E3F6CE"><span id="subrow-unique-label">Unique</span><input type="checkbox" class="subrow-unique-input" name="unique[]" style="background-color: #E3F6CE"></fieldset>'; 
       var subrow_val = '#subrows'+$('#row-fieldset').attr('value'); 
       $(subrow_val).append(subrowHTML); 
      }); 
      $("input.subrow-name-input").on({ 
       keydown: function(e) { 
        if (e.which === 32) 
         return false; 
       }, 
       change: function() { 
        this.value = this.value.replace(/\s/g, ""); 
       } 
      }); 
      $("input.table-name").on({ 
       keydown: function(e) { 
        if (e.which === 32) 
         return false; 
       }, 
       change: function() { 
        this.value = this.value.replace(/\s/g, ""); 
       } 
      }); 
     }); 
    </script> 

回答

2

你有一些重复的ID在你的HTML sintax(如#row-fieldset

如果你检查你的HTML代码,你初始化fieldset标签与行字段集id

<fieldset class="row-fieldset" id="row-fieldset" value="1"> 

,以后你创建一个新的具有相同id

var rowHTML = '<fieldset class="row-fieldset" id="row-fieldset" value=\"'+val_2+'\ 

所以当JQuery的试图找到合适的id,只能找到第一个。

我加入添加子行按钮值找到正确的行

你也没有提供任何jQuery的版本,所以我用2.2.0

检查这个fiddle看到它运行

希望它有帮助

+0

非常感谢您的回答,您的代码完美地工作在我的网站上(我使用jQuery 2.2.3,但它基本相同)。 现在我明白了我的错误,我会尽量不重复。 干杯! – Driblou