2013-07-04 73 views
1

我有一个带有文本输入字段和选项的表单,用户可以在其中添加多个文本输入字段(http://prntscr.com/1dikv3)此屏幕截图将显示它的外观。使用不同的名称获取多个文本输入字段的值?

现在,当曾经使用JS的字段的名称是动态的添加一个新的领域说默认字段的值为领域和新增加的领域将是有field_2,field_3等等...

现在我想获取这些字段的所有值并插入到数据库中。我不知道如何使用数组或循环获取所有这些不同的命名输入字段的值?

这里是我的JS代码:

$(function() { 
    var scntDiv = $('#p_scents'); 
    var i = $('#p_scents p').size() + 1; 

    $('#addScnt').live('click', function() { 
      $('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv); 
      i++; 
      return false; 
    }); 

    $('#remScnt').live('click', function() { 
      if(i > 2) { 
        $(this).parents('p').remove(); 
        i--; 
      } 
      return false; 
    }); }); 

如果有人能请指导我,我应该心存感激。

谢谢

+3

注意到,jQuery的$ .live(http://api.jquery.com/live/)是depricated。 – Ogelami

+0

这些输入是否是实际的形式?如果是这样,我有一个盛大的插件为你,你会爱上 – SpYk3HH

+0

你可以检查在这里的代码jsfiddle.net/jaredwilli/tZPg4/4/ – Jia

回答

2

除非你需要从彼此区分不同的领域,使用所有的同名称,[]后缀。这将导致PHP将它们视为$ _POST数组中的数组。您也可以从每个新字段中删除ID。 ID应该是唯一的,并且在这种情况下,您无论如何都无法使用它们。

所以你的函数变为:

$(function() { 
var scntDiv = $('#p_scents'); 

$('#addScnt').live('click', function() { 
     $('<p><label for="p_scnts"><input type="text" size="20" name="p_scnt[]" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv); 
     return false; 
}); 

$('#remScnt').live('click', function() { 
     if(i > 2) { 
       $(this).parents('p').remove(); 
       i--; 
     } 
     return false; 
}); });' 

在你的PHP脚本,您现在可以在$_POST['p_scnt']

+0

我直接操纵表单数据,但是很好地调用命名输入的'[]'值!这也有很大的不同! – SpYk3HH

+0

感谢迈克它解决了我的问题:) – Jia

+0

迈克一件事我需要问,如果我必须编辑或删除数据库中的记录我将如何做?假设我必须使用这些多个字段在数据库中显示数据,那么我该怎么做? – Jia

0

你可以给所有的输入一个特定的类吗?如果是这样的话:

var answers = {}; 
$(".theClass").each(function() { 
    var fieldName = $(this).prop("name"); 
    answers[fieldName] = $(this).val(); 
}); 

现在你有一个输入名称和答案的对象。

如果你不能给他们上课,你可以使用$("input[type='text']").each(...,但我不知道你在页面上是否有其他文字输入。如果你这样做,也许你可以把它们放在一个具有某种类的div中,并使用$(".myDiv").find("input[type='text']").each(...

0

当然,当你知道内容将被复制时不要使用ID。简而言之,将它们改为课程。

标记

$('。p_scents')//使用类

代码

$(function() { 
    var scntDiv = $('.p_scents'); 
    var i = $('#p_scents p').size() + 1; 

    $('#addScnt').live('click', function() { 
      $('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv); 
      i++; 
      return false; 
    }); 
}); 
-1

正如Mike W的回答中指出,也确保,如果输入名称相同,请确保在名称后包含[],以便将它们作为数据数组收集。


如果所有的输入是一种形式,那么我建议使用类似$.ajaxForm。这个插件使得使用表单极其简单。它还包含ajax,这意味着你完全控制之前,之后和之间的一切。

一个基本的例子:

$('#myFormID').ajaxForm({ 
    target: '#outputID', // this would be an element where you might want the echoed data to display, such as "Success!" or "ERROR 404" // this is not required 
    beforeSubmit: function(formData, jqForm, options) { 
     // if you return false, the form will not submit, so you can validate form here 
     var $return = true; 
     // formData is an array of your input and textarea values 
     // you can manipulate this object or make a straight call like: 
     // also, try using `console.log(formData); return false;` 
     // and look to make sure the form data being submitted is as you want it 
     $("#myFormID input[type=text]").each(function(i) { 
      if (somethingIsWrong) { 
       $return = false; 
      } 
     }); 
     return $return; 
    }, 
    success: function(response, status, xhr, $form) { 
     // response is of course what your back end echoes back 
     console.log(response); 
     alert(status); 
    } 
}) 

同样,那该多好jQuery插件是http://malsup.com/jquery/form/

+0

旁边的点。 OP想要把这些字段放到数据库中。没有这个,他可以“提交”他的表格。 – 2013-07-04 14:54:48

+0

@MikeW yea他可以没有它提交,但我只是指出,这使得提交100x更容易,并允许快速操纵正在提交的数据,因此这是非常有用的。别担心,我也给你提供了一个答案。你提到'[]'情况是正确的 – SpYk3HH

0

如果我理解正确的话,你想PHP遍历所有这些字段访问这些字段作为一个数组存储它?试试这个:

foreach($_REQUEST as $name=>$value) { 
    if(strncmp($name, "p_scnt_", 7) == 0) { 
     ... do something with $value ... 
    } 
} 

或者,你可以用它仅仅排在迈克W公司的答案去;)

相关问题