这有点复杂,所以我希望我说得对。
我有一个加载选项列表的表单,并以一个静态输入开头:
<span id="keyword_list_out" class="input"><input class="keys margin-bottom" type="text" name="keywords[]" />
加载页面时,Ajax调用会显示属于列表的其他输入字段,例如:
<span class="field-wrapper"><input class="keys" type="text" name="keywords[]" value="Option One" /><a class="remove-keyword" href="javascript:void(0);"><img src="images/icons/cross-button-icon.png" /></a></span>
<span class="field-wrapper"><input class="keys" type="text" name="keywords[]" value="Option Two" /><a class="remove-keyword" href="javascript:void(0);"><img src="images/icons/cross-button-icon.png" /></a></span>
这些选项预先添加到第一个静态输入字段ID的顶部:keyword_list_out。
用户可以动态添加更多输入字段,并且可以删除现有字段。
到目前为止所有这一切都很好。我的问题是访问输入字段中包含的数据。提交表单后,我需要能够执行三个功能:
我可以使用输入名称'keyword_name []'作为数组来访问输入字段中的数据,然后我可以遍历数组。
但是,这并未解决具有特定ID号的现有选项。我可以为从Ajax调用加载的字段分配ID号,但静态字段和用户添加的字段不具有ID号,因为这些不是必需的。这些字段将简单地插入到数据库中。
所以我想我的问题是如何确定哪个现有选项属于数据库中的ID号。我应该补充一点,这些选项并不是唯一命名的。
我考虑过这样的事情:
有什么想法吗?
更新
我已将输入字段分为两个数组:existing_options []和new_options []。
在发布之前我的Jquery脚本中添加了:
var existing_options = $('input[name=existing_options]').attr('value');
var new_options = $('input[name=new_options]').attr('value');
发送的Ajax数据是:
'existing_options[]=' + existing_options + '&new_options[]=' + new_options;
然而,PHP返回的是这些值是字符串而不是数组。在这里遗漏了什么......
答案 0 :(得分:1)
我建议在数据库端使用自动增量ID。加载页面时,id的放置方式与<span class="field-wrapper" id="$row[id]">
相同,而且删除时使用:
$('.remove-keyword').on('click', function(){
var id = $(this).parents('span').attr('id');
place ajax post here with data sent being this id.
});
基本上添加关键字也是一样的,除了使用ajax发布到您的脚本,并在脚本中使用mysql_insert_id();
作为返回ID,而不是动态创建下一行。
答案 1 :(得分:1)
当通过AJAX加载字段时,为它们分配ID
<input class="keys" type="text" id="keyword_11" name="keywords[]" value="Option Two" />
<input class="keys" type="text" id="keyword_12" name="keywords[]" value="Option Two" />
在提交时单击然后在jQUery中,您可以循环关键字
var new_keywords=Array();
var existing_keywords=Array();
$("input[name^='keywords']").each(function(){
var id = $(this).attr("id");
var val=$(this).val();
if(id=="" && val!="")
{
new_keywords.push($(this).val());
}
else if(id!="")
{
var keyword_id=id.split("_")[1];
existing_keywords.push({"id":keyword_id,"val":val});
}
});
// call AjAX function add new_keywords to database
// call Ajax function to update existing keywords
更新1
在将new_keywords添加到数据库的成功功能中,请通过AJAX更新现有的dom,这样如果添加新关键字,则编辑它并尝试保存它将具有与之关联的ID。