jQuery - 将数组值设置为具有相同名称的输入

时间:2017-09-13 10:46:18

标签: javascript php jquery arrays

我试图将数组值设置为名为attachments[]

的输入字段

我的数组存储在js变量attachArray

我试过的是,

$('[name="attachments"]').attr('value', attachArray);

$('[name="attachments"]').val(attachArray);

但是像这样在控制器中获得空attachments

array(1) { ["attachments"]=> array(1) { [0]=> string(0) "" } }

我做错了什么?

修改

<div class="col-md-4">
    <div class="form-group ticket-align">
        <label>Attachment</label>
        <label class="btn btn-primary" data-toggle="modal" data-target="#t-attachment-modal">
                    Browse&hellip; 
             <input type="hidden" name="attachments[]">
         </label>
         <span id="fileList"></span>
         <span class="error" id="error-atachments" style='display: none;'></span>
    </div>
</div>

4 个答案:

答案 0 :(得分:3)

因为它是一个隐藏的输入,所以

或者: -

$('[name=attachments]').val(attachArray); 

OR

$('input:hidden[name=attachments]').val(attachArray);

会工作。

注意: - 使用反斜杠( 使用\\转义内部括号(无空格) )。

答案 1 :(得分:2)

您的输入字段名称为attachments[],请尝试使用

$('[name="attachments[]"]').val(attachArray);

答案 2 :(得分:2)

据我所知,您希望将JavaScript数组的内容传播到多个字段,另一方面PHP将其解释为数组。

我将输入从hidden更改为text只是为了使其更加清晰,因此您可以看到值的外观。不要忘记在代码中撤消此操作。

const attachArray = [
  'val1',
  'val2',
];
const attachments = $('[name="attachments[]"]');
for ( let i = 0; i < attachments.length; i += 1 ) {
  $( attachments[ i ] ).val( attachArray[ i ] );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-4">
    <div class="form-group ticket-align">
        <label>Attachment</label>
        <label class="btn btn-primary" data-toggle="modal" data-target="#t-attachment-modal">
                    Browse&hellip; <br>
             <input type="text" name="attachments[]"><br>
             <input type="text" name="attachments[]">
         </label>
         <span id="fileList"></span>
         <span class="error" id="error-atachments" style='display: none;'></span>
    </div>
</div>

但这需要做很多代码。我认为将数组作为JSON发送并使用PHP json_decode将其转换回数组可能更容易,如下所示:

const attachArray = [
  'val1',
  'val2',
];
$('[name="attachments"]').val( JSON.stringify( attachArray ) );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-4">
    <div class="form-group ticket-align">
        <label>Attachment</label>
        <label class="btn btn-primary" data-toggle="modal" data-target="#t-attachment-modal">
                    Browse&hellip; <br>
             <input type="text" name="attachments">
         </label>
         <span id="fileList"></span>
         <span class="error" id="error-atachments" style='display: none;'></span>
    </div>
</div>

做一些像

这样的事情
$attachments = json_decode( $_POST[ 'attachments' ] );

答案 3 :(得分:0)

提及隐藏字段的ID,您要通过表单发送数组,因此请使用方括号声明隐藏字段的名称,如下所示。

<input type="text" name="attachments[]" id="attachments">

并使用jquery val()方法绑定您的数组。

$('#attachments').val(attachArray);

供以后参考:-)