获取Ajax,动态输入字段和静态输入字段加载的表单输入字段的值

时间:2012-05-24 03:47:51

标签: php jquery ajax

这有点复杂,所以我希望我说得对。

我有一个加载选项列表的表单,并以一个静态输入开头:

<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。

用户可以动态添加更多输入字段,并且可以删除现有字段。

到目前为止所有这一切都很好。我的问题是访问输入字段中包含的数据。提交表单后,我需要能够执行三个功能:

  1. 如果用户删除了一个选项,我需要将其从数据库中删除
  2. 如果用户添加了字段,我需要将其插入数据库
  3. 如果用户更改现有字段的值,我需要在数据库中更新它
  4. 我可以使用输入名称'keyword_name []'作为数组来访问输入字段中的数据,然后我可以遍历数组。

    但是,这并未解决具有特定ID号的现有选项。我可以为从Ajax调用加载的字段分配ID号,但静态字段和用户添加的字段不具有ID号,因为这些不是必需的。这些字段将简单地插入到数据库中。

    所以我想我的问题是如何确定哪个现有选项属于数据库中的ID号。我应该补充一点,这些选项并不是唯一命名的。

    我考虑过这样的事情:

    1. 仅为加载Ajax的字段提供ID号
    2. 在提交循环通过每个输入并使用用户不提供的分隔符将ID添加到名称值的末尾。 IE:选项二--- 1
    3. 使用PHP循环遍历数组并将数组值与“---”
    4. 匹配
    5. 如果在'---'上找到匹配项,则更新数据库,否则插入数据库
    6. 有什么想法吗?

      更新

      我已将输入字段分为两个数组: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返回的是这些值是字符串而不是数组。在这里遗漏了什么......

2 个答案:

答案 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。