2011-07-06 8 views
1

私はフォームがあります。余分な名前/値のペアはどこから来ますか?

<form id="f3" method="post" action="interface_add.php"> 
    <fieldset> 
    <input onclick="this.value=''" class="te3" type="text" name="f3a" value="title"/> 
    <input onclick="this.value=''" class="te3" type="text" name="f3b" value="url"/> 
    <a id="f3c" class='but' href="javascript:void(0)" onclick="i3()">Add</a> 
    <a id="f3d" class='but' href="javascript:void(0)" onclick="i3a()">Delete</a> 
    </fieldset> 
    </form> 

をし、私はこのような要素の名前と値 "シリアライズ" するためにいくつかのJavsascriptを使用します。私はここから呼び出す

function is(a) 
    { 
    var b=''; 
    var c=document.forms[a].elements; 
    for(i=0;i<c.length;i++) 
    { 
    if(c[i].type=='checkbox'&&c[i].checked==false) 
     { 
     b+=c[i].name+"=NULL&"; 
     } 
    else 
     { 
     b+=c[i].name+"="+c[i].value+"&"; 
     } 
    } 
    b=b.slice(0,-1); 
    return b; 
    } 

function i3() 
    { 
    var a=''; 
    a=is('f3'); 

私が 'a'に挿入する戻り値は、 'a'に挿入されます。

「未定義=未定義& F3A =タイトル& F3B = URL」

おかしい事は、私が以前に同様の問題があったが、私はこれを解散した理由である「A」をintializingていなかったので、これは、ほとんどだったですパラノイアから「a」が正しく初期化されなかったことを示します。

私は見落とされているかもしれませんが、なぜそこには未定義=出現しません。

+0

検証では時間と帯域幅がかかりますが、フィールドセットを取り出して検証を終了する必要がありますか? –

+0

このフィールドセット要素+で今回検証するCSS/XHTML/Javascriptの約70バイト。 –

+0

あなたの電話。誰もそれを必要としていない場合は、おそらくルールを少し緩めることができます。 – user113716

答えて

2

<fieldset>要素から来ています。

ループ内にnameプロパティのテストを追加するだけです。

+0

@Chris:真実の 'name'プロパティを持たない要素を除外するために、単純な' if'文を私の答えに追加しました。 – user113716

+0

これを実装しました。ありがとう。 –

+0

@Chris:ようこそ。うれしいことはあなたのために働いた。 – user113716

1

fieldsetのような名前のない要素はすべてスキップすることをお勧めします。

function is(a) 
{ 
    var b=''; 
    var c=document.forms[a].elements; 

    for(i=0;i<c.length;i++) 
    { 
     if (c[i].name == undefined) continue; // skip all unamed elements 

     if (c[i].type == 'checkbox' && c[i].checked == false) 
     { 
      b += c[i].name + "=NULL&"; 
     } 
     else 
     { 
      b += c[i].name + "=" + c[i].value + "&"; 
     } 
    } 

    b = b.slice(0,-1); 

    return b; 
} 
+0

ありがとうございます。上記のif(c [i] .name)はもう少し簡潔です。 –

1

ではなく名前を使用して、あなただけのチェックボックスを取得することができます。もちろん

if(c[i].type=='checkbox') 
    { 
    if (c[i].checked==false) 
    { 
    b+=c[i].name+"=NULL&"; 
    } 
    else 
    { 
    b+=c[i].name+"="+c[i].value+"&"; 
    } 
    } 
} 

あなただけのボタンの代わりにリンクを提出し、フォームが自分自身を提出してみましょう使用することができます

<input name="add" type="submit" value="Add"> 
<input name="delete" type="submit" value="Delete"> 

ユーザーが[追加]ボタンをクリックすると、値が...add=Add...として送信されます。削除ボタンをクリックすると、代わりに...delete=Delete...が送信されます。

関連する問題