1

変更された値の投稿データのみを送信したいフォームがあります。

だから私がこれを行ってきた方法は次のようなものです:

function submit_form(){
var hd = [];
// hd is a big array that is defined here
// hd ['some id_number'] = 'some value'
// main function
for (var id_number in hd ){
    var x=document.getElementById(id_number).selectedIndex;
    var y=document.getElementById(id_number).options;
    selector_text = y[x].text;
    if (hd[id_number] == selector_text){
        $(id_number).remove();
    }
}
document.forms["my_form"].submit()
}

したがって、セレクターが配列の内容と等しい場合、データを POST しないことが目標です。

これを行うために、削除機能を実行しています。削除機能までのすべてが期待どおりに機能します。ただし、投稿データを見ると、hd の値に一致する id_numbers の選択された値が取得されます。

POSTデータに移動しないように削除するより良い方法はありますか? id.parent.removeChild(id) メソッドも機能しませんでした。

4

1 に答える 1

3

jQuery IDセレクターはで始まる必要があります#が、あなたのものはそうではないようです:

 $('#' + id_number).remove();

for-inループは通常のインクリメンタルforループである必要があります。これは、JavaScriptで配列を反復処理するための適切な方法です 。for-inループは通常、配列要素ではなくオブジェクトプロパティを反復するために使用されます。

for (var i=0; i<hd.length; i++) {
  // Access hd[i] in the loop

  var x=document.getElementById(hd[i]).selectedIndex;
  var y=document.getElementById(hd[i]).options;

  selector_text = y[x].text;

  if (hd[i] == selector_text){
     $('#' + hd[i]).remove();
  }
}

Since you aren't really using jQuery here except for that line, instead the plain JS version is:

var removeMe = document.getElementById(hd[i]);
removeMe.parentNode.removeChild(removeMe);
于 2012-09-28T19:00:05.697 に答える