2

私はこのフォームを持っています:

<form name ='vote' action='' method='POST'>
    while ($row = mysql_fetch_array($result)){
       <input type='checkbox' name='things[]' value='".$row['name_song']."'
              name='send' onClick='anyCheck(this.form)'>
    } 
    <input type='submit' value='test' name='send'></form>

人々が投票できる最大時間(t)が整数になるようにするには、どうすればよいですか?値をanyCheck関数に、たとえば$maxvotesとして渡したいと思います。

<script type="text/javascript"> 
   function anyCheck(f, e) {
      e = e || window.event;
      var t = 0;
      var c = f['things[]'];
      for (var i = 0; i < c.length; i++) {
         c[i].checked ? t++ : null;
      }
      if (t == 3) {
         alert("Daugiausiai galite balsuoti už triks kūrinius")
         var targ = event.target || event.srcElement;
         targ.checked = false;
      }
   }
</script>
4

2 に答える 2

1

anyCheckはイベント ハンドラから呼び出されるため、オブジェクトを関数に渡し、イベントeventanyCheck()ターゲットを取得して、その.checkedプロパティを に設定しますfalse

<input ...  onClick='anyCheck(this.form, event)'>

function anyCheck(f, e) {

    var t = 0;
    var c = f['things[]'];
    for (var i = 0; i < c.length; i++) {
        c[i].checked ? t++ : null;
    }
    if (t == 3) {
        alert("You can choose a maximum of 2" + name + "haha");

        (event.target || event.srcElement).checked = false;
    }
}

または、ハンドラーが直接バインドされているため、this代わりに渡すことができます。

<input ...  onClick='anyCheck(this)'>

function anyCheck(box) {

    var t = 0;
    var c = box.form['things[]'];
    for (var i = 0; i < c.length; i++) {
        c[i].checked ? t++ : null;
    }
    if (t == 3) {
        alert("You can choose a maximum of 2" + name + "haha");

        box.checked = false;
    }
}
于 2012-12-06T17:52:24.670 に答える
1

このソリューションには jQuery が必要ですが、jQuery セレクターを必要としないように作り直すこともできます。

<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">

<script type="text/javascript">
  $(document).on("click", "input[type=checkbox]", function(e) {
    var num_checked = $("input[type=checkbox]:checked").length;
    if (num_checked > 3) {
      alert("sorry, you have already selected 3 checkboxes!");        
      $(e.target).prop('checked', false);
    }
  });
</script>
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

jsfiddle として: http://jsfiddle.net/RF5Ls/

于 2012-12-06T17:57:48.300 に答える