2017-06-12 16 views
0

私はさまざまなオプションを持つ選択フォーム要素を持っています。オプションの1つは「その他」です。したがって、「その他」を選択すると、ユーザがリストにない値を入力するための隠しフィールドが表示されます。すべてうまく動作します。問題は、ユーザーが他のオプションのいずれかを選択してフォームを送信したときに値が渡されない場合です。一方、「その他」オプションが選択され、テキストボックスを塗りつぶしてからフォームを送信すると、テキストボックスの値が渡されます。オプションが選択された場合に表示される非表示のフィールドがある場合、私のselect要素の値を取得できません

が、これは選択と非表示のテキストフィールドです:

<select name="memo" required class="newtxtbox" id="memo" onchange='checkvalue()'> 
    <option disabled="disabled" selected="selected">Select</option> 
    <option value="Donation for Bulletin">Bulletin</option> 
    <option value="Donation for Care Ministry">Care Ministry</option> 
    <option value="Donation for Cathedral Choir">Cathedral Choir</option> 
    <option value="Donation for Other">Other - (please specify below) </option> 
</select> 

<input type="text" style="display:none" name="memo" id="other"> 

、これはJavaScriptのです:私は小さな何かが足りないのですが、それが何であるかを把握することはできません確信して

function checkvalue()  
{ 
    if(document.getElementById('memo').value == 'Donation for Other') { 
       document.getElementById('other').style.display='block'; 
    } 
    else { 
     document.getElementById('other').style.display='none'; 
    } 
} 

+0

これに対する簡単な解決策は、(あなたが同じ名前を持つ二つの入力要素でフォームを送信するが、わずかに多くの作業を必要とすることができます) 'otherMemo'にご入力フィールドの名前を変更することであり、サーバ上で、「other for donation」が選択されている場合は、パラメータ名「otherMemo」で値を取得します。 – KarelG

+0

@Lindow 2はいできます。それがどういうものか見てみましょう –

+0

@KarelG私は仕事のために現在のコードを手に入れることができなければ、最後の手段として考えました –

答えて

1

これは小さな回避策の視覚的な例です。私がやったのは、各要素の属性を単に変更することでした(name)。 name="memo"の要素を青色で表示するCSSルールを追加しました。青色の要素はサーバーに送信されます。

私はまた、あなたがここでそれをテストできるように、javascriptコードを展開しました。コードに// added for testing purposeの後にコードを含める必要はありません。 "run code snippet"をクリックし、送信ボタンを押してください。

function checkvalue() { 
 
    var select = document.getElementById('memo'); 
 
    var input = document.getElementById('other'); 
 

 
    if (select.value == 'Donation for Other') { 
 
    document.getElementById('other').style.display = 'block'; 
 
    select.name = ''; 
 
    input.name = 'memo'; // form `memo` will now contain this input 
 
    } else { 
 
    document.getElementById('other').style.display = 'none'; 
 
    select.name = 'memo'; 
 
    input.name = ''; 
 
    } 
 
} 
 

 
// added for testing purpose 
 
document.getElementById('test').addEventListener('submit', function(e) { 
 
    e.preventDefault(); // no no submit 
 

 
    // FormData is HTML5 js object that contains ... data from the form ... 
 
    var fd = new FormData(this); 
 

 
    // .entries() isn't widely supported yet. 
 
    for (var tuple of fd.entries()) { 
 
    console.log(tuple[0] + ' contains value "' + tuple[1] + '"'); 
 
    } 
 
});
/* 
 
    added this for visibility of changes 
 
    element that is blue is being sent 
 
*/ 
 

 
input[name="memo"], 
 
select[name="memo"] { 
 
    background-color: lightblue; 
 
}
<form id="test"> 
 
    <select name="memo" required class="newtxtbox" id="memo" onchange='checkvalue()'> 
 
    <option disabled="disabled" selected="selected">Select</option> 
 
    <option value="Donation for Bulletin">Bulletin</option> 
 
    <option value="Donation for Care Ministry">Care Ministry</option> 
 
    <option value="Donation for Cathedral Choir">Cathedral Choir</option> 
 
    <option value="Donation for Other">Other - (please specify below) </option> 
 
</select> 
 

 
    <input type="text" style="display:none" id="other"> 
 

 
    <input type="submit" value="submit" /> 
 
</form>

+0

あなたの答えをありがとう。それは非常に意味をなさない。コードをこれに変更します。私が最初にやったことは、 'select'の' name'を 'memo1'に、' input'フィールドの 'name'を' memo2'に変更することでした。サーバ側では、if($ memo1!= "Other for Donation"の寄付){ \t \t $ memo = $ memo1という条件文を実装しました。 \t} else { \t \t $ memo = "寄付"、 "。$ memo2; \t} ' –

+0

その日の終わりに、何が提出されるのかは' $ memo'にあります。 –

+0

お寄せいただきありがとうございます。心から感謝する。 –

関連する問題