2011-06-07 25 views
5

我正在嘗試更改隱藏輸入字段的值,具體取決於複選框的值。我對JavaScript不太瞭解,但這是迄今爲止我所知道的。如何根據複選框的狀態使用Javascript更改隱藏輸入的值?

<input type="hidden" value="" id="delterms" name="O_" /> 
<input type="checkbox" id="checkbox" onchange="terms()" /> 
<script type="text/javascript"> 
var checked = document.getElementById('checkbox').checked; 
    function terms() { 
    if (checked==false) 
    { 
    document.getElementById('delterms').value='' 
    } 
    else 
    { 
    document.getElementById('delterms').value='Accepted' 
    } 
} 
</script> 

我得到它的工作,但只在第一次點擊,反正是有設定取決於複選框狀態的價值?我懷疑有一些更簡單的辦法,我毫不懷疑複雜化這個問題。

回答

5

嘗試添加event listener,而不是使用HTML「的onchange」屬性,這可以解釋你的東西,將很可能使你的代碼更容易在長期運行維護:

<input type="hidden" id="delterms" value="" name="O_" /> 
<input type="checkbox" id="checkbox" /> 
<script type="text/javascript"> 
    var checkbox = document.getElementById('checkbox') 
    , hidden = document.getElementById('delterms'); 
    checkbox.addEventListener('change', function() { 
    hidden.value = (this.checked) ? 'Accepted' : ''; 
    }, false); 
</script> 

的想法是,每次用戶單擊複選框時都會運行匿名函數,該複選框將隱藏字段的值設置爲「已接受」或空字符串,具體取決於是否選中該複選框。

這個jsFiddle顯示了一個工作的例子。

+0

您好,感謝您的答覆。我明白你在說什麼,但不明白我是如何得到這個更新隱藏的領域的,你有沒有什麼機會可以闡述? – Dave 2011-06-07 16:16:37

+0

@Dave:我更新了我的答案,以展示一種更可靠的方式,讓我知道它對您是否有意義。 – maerics 2011-06-07 16:32:21

0

您的變量checked僅設置一次,因此它始終等於初始值。將它移入你的函數terms()

1

移動變量賦值到函數,即:

function terms() { 
    var checked = document.getElementById('checkbox').checked; 
    if (checked==false) 
0

得到確認值的函數

<script type="text/javascript"> 

     function terms() { 
     var checked = document.getElementById('checkbox').checked; 
     if (checked==false) 
     { 
     document.getElementById('delterms').value='' 
     } 
     else 
     { 
     document.getElementById('delterms').value='Accepted' 
     } 
    } 
    </script> 
0

因爲複選框不是在form.submit()時,他們選中我用的就是點擊複選框時被更新的隱藏字段提交。

<input type="hidden" id="chbx" value="" name="0_"> 
<input type="checkbox" id="__chbx" 
    onclick="document.getElementById('chbx').value = 
      document.getElementById('__chbx').checked;"/> 

(我省略了JSP的代碼,呈現頁面時添加checked屬性複選框,輸入,如果它已經被選中。)

相關問題