2016-10-06 149 views
1

我有一个HTML表格,我希望能够添加一行后,我点击一个按钮,弹出一个对话框,我可以输入必要的行信息。我遇到了一些完全符合我需要的代码。我量身定制了它,尽可能多地使用我的代码。到目前为止,我有弹出框,但在弹出窗口中单击“添加行”后,它不会添加行,这是我需要它执行的操作。我希望有人能够告诉我这有什么问题。我很困扰它。填充对话框后添加行

的JavaScript:

// ----- Dialog Box ----- 

$(function() { 
    var dialog, form, 

     emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, 
     mr_name = $("#mr_name"), 
     buyer_id = $("#buyer_id"), 
     poc_n = $("#poc_n"), 
     poc_e = $("#poc_e"), 
     poc_p = $("#poc_p"), 
     allFields = $([]).add(mr_name).add(buyer_id).add(poc_n).add(poc_e).add(poc_p), 
     tips = $(".validateTips"); 

    function updateTips(t) { 
     tips 
     .text(t) 
     .addClass("ui-state-highlight"); 
     setTimeout(function() { 
     tips.removeClass("ui-state-highlight", 1500); 
     }, 500); 
    } 

    function checkLength(o, n, min, max) { 
     if (o.val().length > max || o.val().length < min) { 
     o.addClass("ui-state-error"); 
     updateTips("Length of " + n + " must be between " + 
      min + " and " + max + "."); 
     return false; 
     } else { 
     return true; 
     } 
    } 

    function checkRegexp(o, regexp, n) { 
     if (!(regexp.test(o.val()))) { 
     o.addClass("ui-state-error"); 
     updateTips(n); 
     return false; 
     } else { 
     return true; 
     } 
    } 

    function addVendor() { 
     var valid = true; 
     allFields.removeClass("ui-state-error"); 

     valid = valid && checkLength(mr_name, "mr_id", 3, 16); 
     valid = valid && checkLength(buyer_id, "buyer_id", 6, 80); 
     valid = valid && checkLength(poc_n, "poc_n", 5, 16); 
     valid = valid && checkLength(poc_e, "buyer_id", 6, 80); 
     valid = valid && checkLength(poc_p, "poc_n", 5, 16); 

     valid = valid && checkRegexp(mr_id, /^[a-z]([0-9a-z_\s])+$/i, "Username may consist of a-z, 0-9, underscores, spaces and must begin with a letter."); 
     valid = valid && checkRegexp(buyer_id, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9"); 
     valid = valid && checkRegexp(poc_n, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9"); 
     valid = valid && checkRegexp(poc_e, emailRegex, "eg. [email protected]"); 
     valid = valid && checkRegexp(poc_p, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9"); 

     if (valid) { 
     $("#html_master tbody").append("<tr>" + 
      "<td>" + mr_name.val() + "</td>" + 
      "<td>" + buyer_id.val() + "</td>" + 
      "<td>" + poc_n.val() + "</td>" + 
      "<td>" + poc_e.val() + "</td>" + 
      "<td>" + poc_p.val() + "</td>" + 
     "</tr>"); 
     dialog.dialog("close"); 
     } 
     return valid; 
    } 

    var dialog = $("#dialog-form").dialog({ 
     autoOpen: false, 
     height: 400, 
     width: 350, 
     modal: true, 
     buttons: { 
     "Add Row": addVendor, 
     Cancel: function() { 
      dialog.dialog("close"); 
     } 
     }, 
     close: function() { 
     form[ 0 ].reset(); 
     allFields.removeClass("ui-state-error"); 
     } 
    }); 

    form = dialog.find("form").on("submit", function(event) { 
     event.preventDefault(); 
     addVendor(); 
    }); 

    $("#create-user").button().on("click", function() { 
     dialog.dialog("open"); 
    }); 
    }); 

HTML/PHP:

<html> 

    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
     <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
     <link rel="stylesheet" type="text/css" href="test1.css"> 
     <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
     <script type="text/javascript" src="test1.js"></script> 
    </head> 

<body> 

<div id="dialog-form" title="Add Vendor"> 
    <p class="validateTips">All form fields are required.</p> 

    <form> 
    <fieldset> 
     <label for="mr_id">Vendor</label> 
     <input type="text" name="mr_id" id="mr_id" class="text ui-widget-content ui-corner-all"> 
     <label for="buyer_id">Buyer ID</label> 
     <input type="text" name="buyer_id" id="buyer_id" class="text ui-widget-content ui-corner-all"> 
     <label for="poc_n">POC Name</label> 
     <input type="text" name="poc_n" id="poc_n" class="text ui-widget-content ui-corner-all"> 
     <label for="poc_p">POC Email</label> 
     <input type="text" name="poc_e" id="poc_e" class="text ui-widget-content ui-corner-all"> 
     <label for="poc_p">POC Phone</label> 
     <input type="text" name="poc_p" id="poc_p" class="text ui-widget-content ui-corner-all"> 

     <!-- Allow form submission with keyboard without duplicating the dialog button --> 
     <input type="submit" tabindex="-1" style="position:absolute; top:-1000px"> 
    </fieldset> 
    </form> 
</div> 



<div id="users-contain" class="ui-widget"> 
<table id="html_master" class="ui-widget ui-widget-content"> 
<thead> 
    <tr class="ui-widget-header"> 
    <td>ID</td> 
    <td>Vendor</td> 
    <td>Buyer ID</td> 
    <td>POC Name</td> 
    <td>POC Email</td> 
    <td>POC Phone</td> 
    <td>Edit/Delete</td> 
    </tr> 
</thead> 
<tbody> 

<?php 
    foreach ($dbh->query($sql) as $rows){ 
    ?> 
    <tr> 
     <td class="mr_id" contenteditable="false"><?php echo intval ($rows['MR_ID'])?></td> 
     <td class="mr_name" contenteditable="false"><?php echo $rows['MR_Name']?></td> 
     <td class="buyer_id" contenteditable="false"><?php echo $rows['Buyer_ID']?></td> 
     <td class="poc_n" contenteditable="false"><?php echo $rows['MR_POC_N']?></td>  
     <td class="poc_e" contenteditable="false"><?php echo $rows['MR_POC_E']?></td> 
     <td class="poc_p" contenteditable="false"><?php echo $rows['MR_POC_P']?></td> 
     <td><input type="button" class="edit" name="edit" value="Edit"> 
     <input type="button" class="deactivate" name="deactivate" value="Deactivate"></td> 
    </tr> 
<?php 
    } 
?> 
</tbody> 

</table> 
</div> 

     <input type="button" id="create-user" value="Add Row"> 

</body> 
</html> 

我知道验证是关闭的权利,但不是我目前的工作重点。我只想在填充弹出窗口后添加一行。

+0

看到您当前的代码,我认为该行已按预期添加到表中,但是当您重新加载页面时,这些行将消失。这是怎么回事? – lucasnadalutti

+0

你是正确的,因为我没有将它们写入到数据库中,所以这些行在重新加载时消失......但是,它不会添加行...当弹出框启动并且我输入信息并单击“添加行“没有任何反应 – Rataiczak24

回答

1

我把你的代码放在this fiddle,删除PHP部分,以便更好地调试它。我不确定你知道的一件事,虽然它非常有用,但你可以使用浏览器的控制台(右键单击> Inspect> Console)来查找最终的JS错误。

无论如何,当您单击Add Row时没有任何事情发生,因为脚本中有一些错误。

1)该行:mr_name = $("#mr_name"),应该mr_name = $("#mr_id"),,因为mr_id是你给你的HTML输入

2)该行idvalid = valid && checkRegexp(mr_id, /^[a-z]([0-9a-z_\s])+$/i, "Username may consist of a-z, 0-9, underscores, spaces and must begin with a letter.");应该有mr_name代替mr_id,因为它是你在命名变量我在前面的项目中提到的线

+0

这正是我需要的......非常感谢你! – Rataiczak24