2017-03-18 50 views
2

我有一個5個單選按鈕的列表,最後一個單選按鈕用於選擇手動輸入文本(「其他」選項)。我似乎無法讓表單爲所有5種可能性工作 - 無論是返回無線電值還是寫入值(目前只有寫入的值而不是任何預設的無線電值)。無法完成5種可能的回報。 這裏的JavaScript要麼選擇文本或將其清除時未選擇:編碼最後一個單選按鈕文本輸入

<script type= "text/javascript" > 
    function HandleRadioOtherBox(grp, txt) 
     { 
     var x, len = grp.length; 
     for (x =0; x<len; ++x) 
     { 
      if (grp[x].checked) break; 
     } 
     if (x < len && grp[x].value == txt.name) 
     { 
      txt.disabled = false; 
      txt.select(); 
      txt.focus(); 
     } 
     else 
     { 
      txt.value = ""; 
      txt.disabled = true; 
     } 
     return true; 
    } 

    window.onload = function() 
    { 
     var ele = document.forms[0].elements; 
     return HandleRadioOtherBox(ele['OPS'], ele['Country']); 
    } 
</script> 

而在這裏,在HTML單選按鈕部分:

<tr valign="top"> 
    <td class="style3">Country: </td> 
    <td class="copy"> 
    <input type="radio" name="OPS" value="United States" checked="checked" 
    onclick="return HandleRadioOtherBox(OPS, Country)" /> United States 
    <input type="radio" name="OPS" value="Canada" 
    onclick="return HandleRadioOtherBox(OPS, Country)" /> Canada 
    <input type="radio" name="OPS" value="England" 
    onclick="return HandleRadioOtherBox(OPS, Country)" /> England 
    <input type="radio" name="OPS" value="Australia" 
    onclick="return HandleRadioOtherBox(OPS, Country)" /> Australia <br /> 
    <input type="radio" name="OPS" value="Country" 
    onclick="return HandleRadioOtherBox(OPS, Country)" /> Other Country: 
     <input type='text' name="Country" id="Country" maxlength='80' /> 
    </td> 
    </tr> 

花了很多很多時間沒有太大的做了一個洞在水泥(還)。 :-) 幫助!

回答

1

你可以寫你的形式的單一功能,檢查兩個事件:

  • 單選按鈕check
  • 文本輸入blur

,然後給出了基於其無線電適當的反應按鈕註冊了一個check事件或者文本輸入是否註冊了blur事件:

var radioButtons = document.querySelectorAll('input[type="radio"]'); 
 
var otherCountryRadio = document.querySelector('.other-country input[type="radio"]'); 
 
var otherCountryText = document.querySelector('.other-country input[type="text"]'); 
 

 
function returnValue() { 
 
    if (this === otherCountryRadio) { 
 
     otherCountryText.focus(); 
 
    } 
 

 
    else { 
 
     if (this.value.match(/\w/)) { 
 
      console.log(this.value); 
 
     } 
 
    } 
 
} 
 

 
for (var i = 0; i < radioButtons.length; i++) { 
 
radioButtons[i].addEventListener('change', returnValue, false); 
 
} 
 

 
otherCountryText.addEventListener('blur', returnValue, false);
div { 
 
margin: 12px; 
 
} 
 

 
.other-country input[type="text"] { 
 
visibility: hidden; 
 
} 
 

 
.other-country input:checked + input[type="text"] { 
 
visibility: visible; 
 
}
<form> 
 
<div class="top-countries"> 
 
<label><input type="radio" name="OPS" value="United States" checked="checked" /> United States</label> 
 
<label><input type="radio" name="OPS" value="Canada" /> Canada</label> 
 
<label><input type="radio" name="OPS" value="England" /> England</label> 
 
<label><input type="radio" name="OPS" value="Australia" /> Australia</label> 
 
</div> 
 

 
<div class="other-country"> 
 
<label> 
 
<input type="radio" name="OPS" value="Other" /> Other Country 
 
<input type="text" name="Country" /> 
 
</label> 
 
</div> 
 
</form>

+0

謝謝Rounin! 這很好地隱藏和顯示「其他」選項並返回輸入值,但不返回無線電選項值。如果我首先輸入另一個值,那麼如果我回去選擇一個無線電值,它會「堅持」。 – Art

+0

雖然很奇怪,但我發現運行您提供的代碼片段的工作方式與使用此頁面上的運行代碼片段一樣正常,但當我將代碼包含在其中包含的頁面中時,並不適用。我似乎無法拾取提交給php腳本時任何單選按鈕的值;僅限輸入到文本字段中的任何內容。如果我返回到頁面並單擊單選按鈕,則當我提交時(form method =「post」action =「mailer.php」),它將使用我上次輸入到文本字段中的任何內容。 PHP腳本可以看到表單中的所有其他值(校友地址更新表單)。 – Art

+0

您可以在表單中包含一個「'。然後,您可以使用上面的腳本來更改該隱藏輸入的值。您發佈的值可以是該隱藏輸入的值。 – Rounin

相關問題