简体   繁体   中英

jquery dynamic subselection combining last and form elements

Update

Tidied up the solution in progress and added some extra details

I have a form area which creates clones based on a template. In order to make sure the form transmits in an order, the script goes through the form at send time appending a number which defines the current batch set. Below is an over simplified representation of what is going on:

<form>
    <div class="batch-template">
        <div class="batch-piece">
            <a class="clone" />
            <input name="test-input">
            <input name="another-test-input">
            <select name="a-drop-down">
        </div>
    </div>
    <div class="batch-paste-area">
    </div>
</form>

When the page starts:

  • The contents of "batch-template" are stored to an object variable
  • The original template is removed from the page
  • An instance of the template is appended to the "batch-paste-area"

The following is an example of the output created after clicking twice.

<form>
    <div class="batch-template">
    </div>
    <div class="batch-paste-area">
        <div class="batch-piece">
            <a class="clone" />
            <input name="test-input">
            <input name="another-test-input">
            <select name="a-drop-down">
        </div>
        <div class="batch-piece">
            <a class="clone" />
            <input name="test-input">
            <input name="another-test-input">
            <select name="a-drop-down">
        </div>
    </div>
</form>

When it comes to submitting the form: prior to serialization, I would like the script to loop through each "batch-piece" within "batch-paste-area" and add a count value to the end of each form field name. Continuing with the set above, the result (to a browser) would seem like that shown below:

<form>
    <div class="batch-template">
    </div>
    <div class="batch-paste-area">
        <div class="batch-piece">
            <a class="clone" />
            <input name="test-input1">
            <input name="another-test-input1">
            <select name="a-drop-down1">
        </div>
        <div class="batch-piece">
            <a class="clone" />
            <input name="test-input2">
            <input name="another-test-input2">
            <select name="a-drop-down2">
        </div>
    </div>
</form>

So far, I can either loop through EVERY input within the paste area or just select the last.

Selecting the last batch-piece is simple:

var intCount = 1;
$('.batch-paste-area .batch-piece').each(function(){
    /* 
    * Would like to be able to loop through form fields here 
    * Below is an attempt to select all form fields for current set 
    */
    $(this + ' input, '+ this + ' select').each(function() {
        var strName = $(this).attr('name') + intCount;
        $(this).attr('name', strName);
    });
    intCount++;    
});

Frustratingly, I had actually tried the correct solution in advance but had forgotten to use the comma at the time!

var intCount = 1;
$('.batch-paste-area .batch-piece').each(function(){
    /* 
    * Would like to be able to loop through form fields here 
    * Below is an attempt to select all form fields for current set 
    */
    $(this).find("input, select").each(function() {
        var strName = $(this).attr('name') + intCount;
        $(this).attr('name', strName);
    });
    intCount++;    
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM