2015-12-08 61 views
-1

我有幾個表單,需要根據對特定問題的回答來顯示和隱藏一些問題。我不想編寫大量的重複代碼,而是試圖編寫一個通用函數。如何在通用函數中選擇單個單選按鈕?

它適用於選擇選項,但不適用於單選按鈕。我添加了一個註釋的console.log語句,其中發生了問題。我不知道如何選擇用戶單擊的單選按鈕,而不是所有單選按鈕。在自定義代碼中,我會使用$(this)並且可以工作,但不知道如何推廣。

在這個例子中,如果#q1是'是',那麼應該顯示'q2'和'q3',否則應該隱藏。如果#a設置爲'1',那麼#b和#c應該顯示,否則將被隱藏。

https://jsfiddle.net/mskppbjL/

HTML:

<div id="q1"> 
    Question 1 
    <select> 
    <option>Select</option> 
    <option value="yes">Yes</option> 
    <option value="no">No</option> 
    </select> 
</div> 
<div id="q2"> 
    Question 2 
    <input type="text" /> 
</div> 
<div id="q3"> 
    Question 3 
    <input type="radio" name="q3" value="0">0 
    <input type="radio" name="q3" value="1">1 
    <input type="radio" name="q3" value="2">2 
</div> 



<div id="a"> 
    <input type="radio" name="q3" value="0">0 
    <input type="radio" name="q3" value="1" checked>1 
    <input type="radio" name="q3" value="2">2 
</div> 
<div class="b">b</div> 
<div class="c">c</div> 

JS:

function set_related(element, value, related) { 

    var element = element, 
    value = value, 
    related = related; 

    function display() { 
    console.log($(element).val()); // always returns 0 because not $(this) element but all 
    if ($(element).val() == value ? $(related).show() : $(related).hide()); 
    } 

    $(document).ready(function() { 
    display(); 
    $(element).change(display); 
    }) 

} 

$(document).ready(function() { 
    set_related($("#q1 select"), "yes", $("#q2, #q3")); 
    set_related($("#a input[type='radio']"), "1", $(".b, .c")); 
}) 

回答

1

編輯:

你的函數調用單選按鈕應該是

$("#a input[type='radio']").click(function() { 
    set_related($(this), "1", $(".b, .c")); 
    }); 

DEMO

+0

我確實想到過,並嘗試過。當您單擊單選按鈕時,它不顯示/隱藏「b」和「c」。所以這沒有奏效。 –

+0

立即嘗試更新的解決方案並讓我們知道。 –

+0

工作,謝謝。也許這是唯一的方法,儘管爲每個問題寫出使用泛型函數的相當多的東西。我認爲有可能用OOP結構寫出整個代碼的更好的方法,但目前超出了我的技能範圍。 –

0

可以使用type屬性來選擇單選按鈕,以及checked僞類選定元件,例如;

$('#q3 input[type="radio"]:checked'); 

在你想要的東西類似的功能;

$('#q1 input[type="radio"]').on('change', function(){ 
    if ($(this).val() == 'yes') 
    { 
     $('#q2').show(); 
     $('#q3').show(); 
    } 
    else 
    { 
     $('#q2').hide(); 
     $('#q3').hide(); 
    } 
}); 
+0

如果我爲每個代碼自定義代碼,但不能在泛型函數中進行代碼編譯,那將會起作用。 –