javascript-为动态字段分配增量值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-为动态字段分配增量值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7216字,纯文字阅读大概需要11分钟。
内容图文
![javascript-为动态字段分配增量值](/upload/InfoBanner/zyjiaocheng/678/6b0e56fe458a41d0a5f4717c0ac893dd.jpg)
我有从jquery函数生成的动态输入字段.可以通过单击这些输入字段来添加或删除按钮.这些字段中填充了mysql表中的数据.每个填充的输入都有一个从数据库中获取的唯一ID.添加新字段时,我从ajax请求中获取下一个AUTO_INCREMENT.然后,我可以为所有字段增加1.我只想对新字段执行此操作.如果由于某种原因从另一个应用程序进行了插入查询事务,它将从字段更新开始增量,然后使用正确的值更新其余部分(检查以了解我的意思jsFiddle(http://jsfiddle.net/f9XP8/2/).
问题在于如何将它们放在一起.我只想跟随就能添加一个新字段,并为数据库插入分配适当的下一个person_id. LIVE EXAMPLE
<script>
$(document).ready(function () {
var $increment_num = $('#increment_num');
var interval = 100; //3000 = 3 seconds
function doAjax() {
$.ajax({
type: 'POST',
url: 'personAutoIncrement.php',
data: $(this).serialize(),
dataType: 'json',
success: function (data) {
var $cloned = $('#input_table tr');
var num = parseInt(data);
$increment_num.val(num);
$cloned.each(function(i){
$(this).find('[name^="increment_id"]').first().val(num+i);
})
},
complete: function (data) {
// Schedule the next
setTimeout(doAjax, interval);
}
});
}
setTimeout(doAjax, interval);
var click_count = 0;
$('#btnAdd').click(function () {
click_count++;
var $clones = $('#input_table tr'),
num = $clones.size() + 1,
next_num = parseInt($clones.last().find('input[name^="increment_id"]').val()) + 1,
$template = $clones.first(),
newSection = $template.clone().attr('id', 'pq_entry_'+num),
ident = 'increment_id_'+num;
person_id = 'person_id_'+num;
person_fname = 'person_fname_'+num;
person_lname = 'person_lname_'+num;
// clear out all sections of new input
newSection.find('input').not('[name^="increment_id"]').val('');
newSection.find('input[name^="increment_id"]').attr({
'id': ident,
'name': ident
}).val(/*next_num*/);
newSection.find('input[name^="person_id"]').attr({
'id': person_id,
'name': person_id
}).val(/*next_num*/);
newSection.find('input[name^="person_fname"]').attr({
'id': person_fname,
'name': person_fname
}).val(/*next_num*/);
$('#input_table').append(newSection);
$('#btnDel').prop('disabled', '');
if (num == 100) $('#btnAdd').prop('disabled', 'disabled');
});
$('#btnDel').click(function () {
var num = $('.clonedSection').length; // how many duplicate input fields we currently have
$('#pq_entry_' + num).remove(); // remove the last element
// enable the "add" button
$('#btnAdd').prop('disabled', '');
// if only one element remains, disable the "remove" button
if (num - 1 == 1) $('#btnDel').prop('disabled', 'disabled');
});
$('#btnDel').prop('disabled', 'disabled');
});
</script>
html
<table>
<thead>
<tr>
<th>ID from DB</th>
<th>First Name</th>
</tr>
</thead>
<tbody id="input_table">
<tr id="pq_entry_1">
<td><input type="text" id="increment_id_1" name="increment_id_1" readonly value="5" /></td>
<td><input type="text" name="first_name" placeholder="First Name" /></td>
</tr>
</tbody>
</table>
<input type='button' id='btnAdd' value='add text box' />
<input type='button' id='btnDel' value='Delete' /></br>
</table>
解决方法:
如果我没记错的话,您想知道如何增加某些行,但允许其他行“冻结”(因为它们已保存到数据库中).我对您的代码做了一些更改,以下是重要说明:
>我删除了动态名称属性.您不需要动态生成字段名称,只需分配data- *属性来保存ID或引用tr.find(‘input [name =“ person_id”]’)
>在tr中添加了一个数据保存的属性,以了解是否应将其包含在更新的自动增量ID中,或者是否应保持原样
>在每行旁边添加了一个保存按钮,因为它只是在该行上设置了数据保存的属性,因此您可以添加AJAX调用以保存记录
Javascript:
$(document).ready(function () {
var $increment_num = $('#increment_num');
var interval = 5000; //3000 = 3 seconds
function doAjax() {
$.ajax({
type: 'POST',
url: 'personAutoIncrement.php',
data: $(this).serialize(),
dataType: 'json',
success: function (data) {
var $cloned = $('#input_table tr').not('[data-saved]');
var num = parseInt(data);
$increment_num.val(num);
$cloned.each(function(i){
var $this = $(this);
$this.find('[name^="person_id"]').first().val(num+i);
})
},
complete: function (data) {
// Schedule the next
setTimeout(doAjax, interval);
}
});
}
setTimeout(doAjax, interval);
var click_count = 0;
$('#btnAdd').click(function () {
click_count++;
var $clones = $('#input_table tr'),
num = $clones.size() + 1,
next_num = parseInt($clones.last().find('input[name^="person_id"]').val()) + 1,
$template = $clones.first(),
newSection = $template.clone().attr('id', 'pq_entry_'+num),
person_id = 'person_id_'+num;
person_fname = 'person_fname_'+num;
person_lname = 'person_lname_'+num;
newSection.removeAttr('data-saved');
// clear out all sections of new input
newSection.find('input[type="text"]').val('');
newSection.find('input[name^="person_id"]').attr({
'id': person_id
}).val(next_num);
newSection.find('input[name^="person_fname"]').attr({
'id': person_fname
});
newSection.find('input[type="button"]').attr('data-ident', next_num);
$('#input_table').append(newSection);
$('#btnDel').prop('disabled', '');
if (num == 100) $('#btnAdd').prop('disabled', 'disabled');
});
$('.save-button').click(function(){
var $parent = $(this).parents('.clonedSection')
var id = $parent.find('input[name="person_id"]').val();
// do whatever else here, save to db
$parent.attr('data-saved', '1');
})
$('#btnDel').click(function () {
var num = $('.clonedSection').length; // how many duplicate input fields we currently have
$('#pq_entry_' + num).remove(); // remove the last element
// enable the "add" button
$('#btnAdd').prop('disabled', '');
// if only one element remains, disable the "remove" button
if (num - 1 == 1) $('#btnDel').prop('disabled', 'disabled');
});
$('#btnDel').prop('disabled', 'disabled');
});
HTML:
<form>
<strong>Start Increment from Next ID to be inserted in the DB:</strong><input id="increment_num" name="increment_num" type="text" /></br>
<table>
<thead>
<tr><th>ID from DB</th><th></th>
<th>First Name</th></tr>
</thead>
<tbody id="input_table" >
<tr id="pq_entry_1" class="clonedSection" data-saved="1">
<td><input type="text" name="person_id" value='1' readonly /></td>
<td><input id="person_fname_1" name="person_fname" placeholder=" First Name" type="text" value='James'/></td>
<td><input type="button" class="save-button" value="Save" />
</tr>
<tr id="pq_entry_2" class="clonedSection" >
<td><input type="text" name="person_id" value='2' readonly /></td>
<td><input id="person_fname_2" name="person_fname" placeholder=" First Name" type="text" value='Cynthia'/></td>
<td><input type="button" class="save-button" value="Save" />
</tr>
</tbody>
</table>
<input type='button' id='btnAdd' value='add another Person' />
<input type='button' id='btnDel' value='Delete' /></br>
</form>
说了这么多,我可能会通过隐藏元素来以不同的方式处理:
<输入type =“ hidden” name =“ person_id” value =“ 1” />
在生成新行时将其无效:
<输入type =“ hidden” name =“ person_id” value =“” />
然后在我的PHP中,我将允许MySQL以这种方式处理id的自动递增:
<?php
$params = $_POST;
if(is_numeric($params['person_id'])){
$sql = sprintf('UPDATE person SET fname = "%s", lname = "%s" WHERE person_id = %u LIMIT 1',
mysql_real_escape_string($params['fname']),
mysql_real_escape_string($params['lname']),
intval($params['person_id'])
);
} else {
// the NULL tells MySQL to select the correct next increment id automatically
$sql = sprintf('INSERT INTO person (id, fname, lname) VALUES (NULL, "%s", "%s")',
mysql_real_escape_string($params['fname']),
mysql_real_escape_string($params['lname']);
);
}
?>
内容总结
以上是互联网集市为您收集整理的javascript-为动态字段分配增量值全部内容,希望文章能够帮你解决javascript-为动态字段分配增量值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。