简体   繁体   English

具有动态表Jquery和Javascript的自动完成功能

[英]Autocomplete w/Dynamic Table Jquery and Javascript

I have resolved a few things, and it works now, thanks to this page, they helped me in another thing. 我已经解决了几件事,现在可以了,多亏了此页面,他们在另一件事上帮助了我。 Now, this is how I got the code, and the Autocomplete works, but only I can just with the ones that are loaded when the page is displayed, if I enter the first one, the autocomplete script puts the description, quantity and price of the code I entered, instead of just the first row, or the row I want to put the code in. This is my code right now. 现在,这就是我获得代码的方式,并且自动完成功能可以正常工作,但是只有我可以处理显示页面时加载的内容,如果我输入第一个,则自动完成脚本会放入描述,数量和价格我输入的代码,而不仅仅是第一行或我要放入代码的行。这是我现在的代码。

 $(document).ready(function() { //this is added just to pre-populate some rows addRow2('dataTable'); $(".chkall").click(function() { if ($(".chkall").is(':checked')) { $("#dataTable input[type=checkbox]").each(function() { $(this).prop("checked", true); }); } else { $("#dataTable input[type=checkbox]").each(function() { $(this).prop("checked", false); }); } }); $('.get_total, .g_total').click(function(e) { g_total = 0; $('input.total').each(function() { g_total += eval($(this).val()); }); console.log(g_total); $('.g_total').html(g_total); }) $('input.total').on('change', function() { g_total = 0; $('input.total').each(function() { g_total += eval($(this).val()); $('.g_total').html(g_total); }) }) }) function grandTotal() { g_total = 0; $('input.total').each(function() { g_total += eval($(this).val()); $('.g_total').html(g_total); }) } function addRow2(tableid) { var table = $('#' + tableid); rowCount = table.children().length; //console.log(table.children().length); newrow = '<tr class="dataRow"><td><input type="checkbox" name="chkbox[]" class="remove"></td><td><input class="codigo" type="text" name="codigo[]"></td><td><input type="text" class="descripcion" name="descripcion[]"></td><td><input type="text" step="any" class="cantidad" min="1" onchange="calc2($(this))" name="cantidad[]"></td><td><input type="text" step="any" min="0" value="0" class="precio" name="precio[]" onchange="calc2($(this));"></td><td><input type="text" value="0" class="total" name="total[]"></td></tr>'; table.append(newrow); $("#dataTable input[id^='codigo']").autocomplete({ source:'buscarcompra.php', minLength:1 }); $("#dataTable input[id^='codigo']").focusout(function(){ $.ajax({ url:'producto.php', type:'POST', dataType:'json', data:{ codigo: $("#dataTable input[id^='codigo']").val()} }).done(function(respuesta){ $("#dataTable input[name^='descripcion']").val(respuesta.descripcion); $("#dataTable input[name^='precio']").val(respuesta.precio); }); }); } function calc2(_row) { row = _row.closest('.dataRow'); //console.log(); // qty = row.find('.cantidad').val(); price = row.find('.precio').val(); total = parseFloat(qty) * parseFloat(price); console.log('qty:' + qty + ' * price:' + price + ' = ' + total); row.closest('.dataRow').find('.total').val(total); grandTotal(); } function deleteRow(tableID) { try { var table = document.getElementById(tableID); var rowCount = table.rows.length; for (var i = 0; i < rowCount; i++) { var row = table.rows[i]; var chkbox = row.cells[0].childNodes[0]; if (null != chkbox && true == chkbox.checked) { table.deleteRow(i); rowCount--; i--; } } } catch (e) { alert(e); } } 
 .g_total { width: 100px; background-color: #ccc; height: 20px; display: inline-block; float: right; } .cantidad, .precio, .total { /* height: 50px; width: 40px;*/ text-align: center; } .cantidad { width: 84px; } .codigo, .descripcion { width: 54px } .precio, .total { width: 121px; } 
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script> <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/smoothness/jquery-ui.css" /> <h1>CARRITO DE COMPRAS</h1> <INPUT type="button" value="Agregar Producto" onClick="addRow2('dataTable')" /> <INPUT type="button" value="Borrar Producto" onClick="deleteRow('dataTable')" /> <input type="button" class="get_total" value="Get Total" /> <form id="myform" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> <TABLE border="1"> <thead> <tr> <th> <input type="checkbox" class="chkall"> </th> <th class="codigo">CODIGO</th> <th class="descripcion">DESCRIPCION</th> <th class="cantidad">CANTIDAD</th> <th class="precio">PRECIO</th> <th class='total'>TOTAL</th> </tr> </thead> <tbody id="dataTable"> </tbody> </TABLE> </div> </br> <div class="g_total"> </span> 

You can create a function to attach .autocomplete() and .focusout() events to :last .codigo element at .ready() handler and addRow function call. 您可以创建一个函数,以在.ready()处理程序和addRow函数调用.autocomplete().focusout()事件附加到:last .codigo元素。 Substituted + operator for eval() calls. eval()调用替换为+运算符。

 var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ]; $(document).ready(function() { //this is added just to pre-populate some rows addRow2('dataTable'); addAutocompleteAndFocusout("#dataTable input[class^='codigo']", availableTags); $(".chkall").click(function() { if ($(".chkall").is(':checked')) { $("#dataTable input[type=checkbox]").each(function() { $(this).prop("checked", true); }); } else { $("#dataTable input[type=checkbox]").each(function() { $(this).prop("checked", false); }); } }); $('.get_total, .g_total').click(function(e) { g_total = 0; $('input.total').each(function() { g_total += +$(this).val(); }); console.log(g_total); $('.g_total').html(g_total); }) $('input.total').on('change', function() { g_total = 0; $('input.total').each(function() { g_total += +$(this).val(); $('.g_total').html(g_total); }) }) }) function addAutocompleteAndFocusout(selector, src) { (typeof selector === "string" ? $(selector) : selector).autocomplete({ source: src }) .focusout(function() { console.log("focusout called") }) } function grandTotal() { g_total = 0; $('input.total').each(function() { g_total += +$(this).val(); $('.g_total').html(g_total); }) } function addRow2(tableid) { var table = $('#' + tableid); rowCount = table.children().length; newrow = '<tr class="dataRow"><td><input type="checkbox" name="chkbox[]" class="remove"></td><td><input class="codigo" type="text" name="codigo[]"></td><td><input type="text" class="descripcion" name="descripcion[]"></td><td><input type="text" step="any" class="cantidad" min="1" onchange="calc2($(this))" name="cantidad[]"></td><td><input type="text" step="any" min="0" value="0" class="precio" name="precio[]" onchange="calc2($(this));"></td><td><input type="text" value="0" class="total" name="total[]"></td></tr>'; table.append(newrow); // attach `.autocomplete()`, `.focusout()` to `:last` `.codigo` element addAutocompleteAndFocusout(table.find(".codigo:last"), availableTags); } function calc2(_row) { row = _row.closest('.dataRow'); qty = row.find('.cantidad').val(); price = row.find('.precio').val(); total = parseFloat(qty) * parseFloat(price); console.log('qty:' + qty + ' * price:' + price + ' = ' + total); row.closest('.dataRow').find('.total').val(total); grandTotal(); } function deleteRow(tableID) { try { var table = document.getElementById(tableID); var rowCount = table.rows.length; for (var i = 0; i < rowCount; i++) { var row = table.rows[i]; var chkbox = row.cells[0].childNodes[0]; if (null != chkbox && true == chkbox.checked) { table.deleteRow(i); rowCount--; i--; } } } catch (e) { alert(e); } } 
 .g_total { width: 100px; background-color: #ccc; height: 20px; display: inline-block; float: right; } .cantidad, .precio, .total { /* height: 50px; width: 40px;*/ text-align: center; } .cantidad { width: 84px; } .codigo, .descripcion { width: 54px } .precio, .total { width: 121px; } 
 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script> <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/smoothness/jquery-ui.css" /> <h1>CARRITO DE COMPRAS</h1> <INPUT type="button" value="Agregar Producto" onClick="addRow2('dataTable')" /> <INPUT type="button" value="Borrar Producto" onClick="deleteRow('dataTable')" /> <input type="button" class="get_total" value="Get Total" /> <form id="myform" action="" method="post"> <TABLE border="1"> <thead> <tr> <th> <input type="checkbox" class="chkall"> </th> <th class="codigo">CODIGO</th> <th class="descripcion">DESCRIPCION</th> <th class="cantidad">CANTIDAD</th> <th class="precio">PRECIO</th> <th class='total'>TOTAL</th> </tr> </thead> <tbody id="dataTable"> </tbody> </TABLE> <br/> <div class="g_total"> </div> </form> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM