0

[フィールドの追加]ボタンで継続的に追加できるフォーム要素がたくさんあります。今、私はこれらのフィールドに次のような増分名を付けたいと思います

input-name-xyz-1、input-name-xyz-2、...。

input-name-abc-1、input-name-abc-2、....。

foo-1、foo-2、foo-3、...。

等々。

[フィールドの追加]ボタンは、ノードを複製するためにdom要素を操作するaddField()と呼ばれる関数を呼び出します。

インクリメンタル名のロジックの作成に問題があります。助けてくれませんか?

これが私が取り組んでいるコードです(フォーム要素はlaravelで生成されます)

/*THE HTML*/
<section class="input">
        {{ Form::label('achievements', 'Achievements:') }}
        <input class="count" name="achievements-count" type="hidden" value="1">
        <p class="addedField input">
            {{ Form::input('input-name-xyz-1', $competition_games, Input::old('achievement-competition'), array('id' => 'achievement-competition')); }}
            {{ Form::select('input-name-abc-1', array('Year - Place'), Input::old('achievement-year'), array('id' => 'achievement-year')) }}
            {{ Form::select('foo-1',    array('Position', 'Gold' => 'Gold', 'Silver' => 'Silver', 'Bronze' => 'Bronze', 'Participant' => 'Participant'), Input::old('achievement-achieved'), array('id' => 'achievement-achieved')) }}
        </p>
        <a onclick="addField(this)">+</a>
    </section>

とjavascript

function addField(elem){
    var parent = elem.parentNode;
    var addName = parent.id;
    var count = ++(parent.getElementsByClassName("count")[0].value);
    var lastNode = parent.getElementsByClassName("addedField")[count-2];
    var clone = lastNode.cloneNode(true); 
    var nodes = clone.childNodes;
    for(i=0; i<nodes.length-1; i++){
        nodes[i].value = "";
        nodes[i].name = //I need the logic right here//.
    }
    if(count == 2)
        clone.innerHTML += "<a class='removeLink' onClick='removeField(this)'>X</a>";
    parent.insertBefore(clone,elem);
}

-よろしく、Aayush Shrestha

4

1 に答える 1

0

この関数を使用して、文字列の最後にある任意の数値をインクリメントします。

function incNumAtEnd(s) {
  return s.replace(/\d$/, function(match, ofs, str) {
    return (parseInt(match) + 1).toString();
  });
}

そして、これがあなたのコードでの用法です。

nodes[i].name = incNumAtEnd(nodes[i].name);
于 2012-09-23T13:04:23.803 に答える