1

いくつかのパラメーターを渡すフォームがあります。これまでのところ、在庫パラメーターが渡されています。

var params = "title=" + document.getElementById("title").value + 
             "&url=" + document.getElementById("url").value + 
             "&snippet=" + document.getElementById("snippet").value +
             "&tags=" + document.getElementById("tags").value +
             "&status_bookmark=" + document.getElementById("status_bookmark").value +
             "&comment=" + document.getElementById("comment").value +
             "&status_comment=" + document.getElementById("status_comment").value;

このパラメーター文字列に追加のフォーム要素を追加しようとしています。

var i, lng = document.getElementById('addbookmark').length;
// If the length property is undefined, then there is only one checkbox.
if (typeof lng === "undefined") {
    params + "&topic-link-item-1=" + document.getElementById("topic-link-item-1").value;
    params + "&topic-link-comment-box-1=" + document.getElementById("topic-link-comment-box-1").value;
}
else {
    for (i = 0; i < lng; i++) {
        params + "&topic-link-item-" + i + "=" + document.getElementById("topic-link-item-" + i).value;
        params + "&topic-link-comment-box-" + i + "=" + document.getElementById("topic-link-comment-box-" + i).value;
    }
}

ここでは、 StackOverflow の別の記事から抜粋したコードを使用しました。ご覧のとおり、jQuery を介して別の場所で生成しているアドホック フォーム要素と一致する一連の対になったパラメーターを構築しようとしていますが、これは機能します。

ただし、これらの値はフォームを介して渡されていないように見えますが、他のフォーム要素は渡されています。

助言がありますか?

アップデート

提案に従ってコードを修正しましたが、機能していません。

var i, formObj = document.form['addbookmark'], formObjLng = document.form['addbookmark'].length;
// If the length property is undefined, then there is only one checkbox.
if ((typeof formObjLng !== "undefined")) {
    for (i = 0; i < formObjLng; i++) {
        if ((formObj.elements['topic-link-item-' + i].type == "checkbox") && (formObj.elements['topic-link-item-' + i].checked)) {
            params = params + "&topic-link-item-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-item-" + i)).value;
            params = params + "&topic-link-comment-box-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-comment-box-" + i)).value;
        }
    }
}

フォームに関しては、「addbookmark」という ID を持つ単純なフォームであり、前に述べたことを繰り返しますが、ここで試みていることを除いて、他のすべては機能します。

4

2 に答える 2

1

コードには 2 つの問題があります。関数を使用して値を URL エンコードする必要がありますencodeURIComponentparamsまた、連結時に結果を変数に代入する必要があります。

var params = 
    "title=" + encodeURIComponent(document.getElementById("title").value) + 
    "&url=" + encodeURIComponent(document.getElementById("url").value) + 
    "&snippet=" + encodeURIComponent(document.getElementById("snippet").value) +
    "&tags=" + encodeURIComponent(document.getElementById("tags").value) +
    "&status_bookmark=" + encodeURIComponent(document.getElementById("status_bookmark").value) +
    "&comment=" + encodeURIComponent(document.getElementById("comment").value) +
    "&status_comment=" + encodeURIComponent(document.getElementById("status_comment").value);

また、追加する他の値についても:

var i, lng = document.getElementById('addbookmark').length;
// If the length property is undefined, then there is only one checkbox.
if (typeof lng === "undefined") {
    params += "&topic-link-item-1=" + encodeURIComponent(document.getElementById("topic-link-item-1").value);
    params += "&topic-link-comment-box-1=" + encodeURIComponent(document.getElementById("topic-link-comment-box-1").value);
}
else {
    for (i = 0; i < lng; i++) {
        params += "&topic-link-item-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-item-" + i).value);
        params += "&topic-link-comment-box-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-comment-box-" + i).value);
    }
}

方法に注意してください:

params += "&topic-link-item-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-item-" + i).value);

これは次と同等です:

params = params + "&topic-link-item-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-item-" + i).value);

最初に行っていたことと同じではありません。

params + "&topic-link-item-" + i + "=" + encodeURIComponent(document.getElementById("topic-link-item-" + i).value);

単純に 2 つの値を連結し、結果をparams変数に代入しませんでした。

于 2013-05-10T13:09:52.117 に答える