0

この JavaScript コードでは、その関数を呼び出すと、このアラートは JSON を出力しますが、いくつかの値が欠落しています。完全に 3 つのフィールド (2 つのグループ) があり、次のように出力されることがあります。

{"":"01bce391-d3a2-4582-8e53-6a45bb583284","cast":"07392eb1-c356-4760-8f4c-  
62ff164ca721"}

また

{"":"01bce391-d3a2-4582-8e53-6a45bb583284","asd":"01bce391-
d3a2-4582-8e53-6a45345242","cast":"07392eb1-c356-4760-8f4c-62ff164ca721"}

カウンタ:

var counteradd=4;
$("#getButton").click(function () {
    var jsonadd = {};
    for(i=1; i<counteradd;i++) {
        jsonadd[$('#textboxadd' + i).val()] = $('#searchaddid' + i).val();
        alert('#searchaddid' + i);
        alert($('#searchaddid' + i).val());
    }

    alert(JSON.stringify(jsonadd));
});
4

1 に答える 1

0

ここで何をしようとしているのか正確にはわかりませんが、これを機能させるために修正する必要のあるバグがいくつかありました。

  • コードの最後にブラケットと括弧を追加します。
  • に変更newTextBoxDivcast.after().html(newTextBoxDivcast.append(ます。この$.after()関数は、そのオブジェクトの兄弟として新しい要素を作成し、それを忘れます。次に、$.html()その現在のオブジェクトの HTML を挿入したものに置き換えます。
  • jsoncastadd オブジェクトが定義される行を変更して、その値が から取得されるようにします$('#secastadd' + i)。ここのコードで$('#searchcastaddid' + i)は、常に空で、決して触れられません。
  • 提供したフィドルに jQuery を外部リソースとして追加します。

問題が発生する理由の 1 つは、同じキーが複数回使用されている場合です。たとえば、jsoncastadd["blah"] = 5andjsoncastadd["blah"] = 6は最後にだけ残します{"blah":"6"}

これが私が思いついた結果のコードです:

$(document).ready(function(){
    var countercastadd=1;
    $(document).on('click', '.removebtnaddcast', function() {
        var finalremadd = $(this).attr("id").match(/\d+/);
        alert(finalremadd);
        $('#searchcastaddid'+ finalremadd).attr('value','');
        $('#textboxcastadd'+ finalremadd).val("");
        $('#secastadd'+ finalremadd).val("");
    });
    $("#addc").click(function () {
        var newTextBoxDivcast = $(document.createElement('div'))
        .attr("id", 'TextBoxDivcast' + countercastadd);
        newTextBoxDivcast.append(' <input type="text" placeholder="Search" name="searchcastadd' + countercastadd +
            '" id="secastadd' + countercastadd + '" value=""> <input type="text" placeholder="Cast" name="Castadd' + countercastadd +
            '" id="textboxcastadd' + countercastadd + '" value="" > <input type="button" id="removebtnaddcast' + countercastadd +
            '" class="removebtnaddcast" value="-" > <input type="hidden"  name="searchcastaddid' + countercastadd +
            '" id="searchcastaddid' + countercastadd + '" value="" >');
        newTextBoxDivcast.appendTo("#TextBoxesGroup1");
        countercastadd++;
        //alert(countercastadd);
    });
    $("#getButton").click(function () {
        var jsoncastadd = {};
        for(i=1; i<countercastadd;i++)
            jsoncastadd[$('#textboxcastadd' + i).val()] = $('#secastadd' + i).val();
        alert(JSON.stringify(jsoncastadd));
    });
});
于 2013-05-23T17:00:54.297 に答える