jQuery - set array values to the input with the same name

37,971

Solution 1

Since it's a hidden input, so

Either:-

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

OR

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

Will work.

Note:- Use the backslashes(Escape internal brackets with \\(no space)).

Solution 2

As far as I understand is that you want to spread the content of an JavaScript array to multiple fields that PHP on the other hand interprets as an array.

I changed the inputs from hidden to text just to make it a little bit more clear and so you can see how the values do look like. Don't forget to undo this in your code.

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>

But this is a lot of code to do. I think it might be easier to send the array as JSON and use PHPs json_decode to convert it back into an array, like so:

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>

And do something like

$attachments = json_decode( $_POST[ 'attachments' ] );

Solution 3

you have input field with name as attachments[] so try this

$('[name="attachments[]"]').val(attachArray);
Share:
37,971
Keyur
Author by

Keyur

Computer Engineer! Vast experience in VueJS (Vanilla, Quasar, NuxtJS), Angular, PHP (Core, Zend framework 2, Laravel 5+, Symfony 3), JavaScript and jQuery. #ReadyToHelp

Updated on July 09, 2022

Comments

  • Keyur
    Keyur almost 2 years

    I was trying to set the array values to the input field named attachments[]

    I have array stored in js variable attachArray

    What I have tried is,

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

    or

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

    But getting empty attachments in the controller like this,

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

    What I'm doing wrong?

    EDIT

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