1

mySQL データベースから受け取った情報に基づいてチェック ボックスのリストを形成する for ループがあります。以下は、チェック ボックスを形成する for ループです (不要なコードは削除されています)。

for ($i = 1; $i <= count($descriptionIDsArray); $i++) {
    $statuses = mysql_fetch_assoc(mysql_query(sprintf("SELECT status, description FROM status_descriptions WHERE description_id='$i'")));
    $status = $statuses["status"]; ?>
    <input type="checkbox" value="<?php echo $status ?>" <?php if ($check == 1) {echo "checked='checked'";} ?> onchange="checkBox()" /><?php echo $description ?><br />
<?php } ?>

ボックスをオンまたはオフにすると、次の関数が呼び出されます。

<script type="text/javascript">
    function checkBox() {
        var status = $("input:checkbox").val();
        document.getElementById("test").innerHTML = status;
    }
</script>

「テスト」に表示される唯一の値は、最初のチェック ボックスの値です。最初の for ループ全体で $status をエコーすると、すべての値が正しく表示されるため、Javascript コードが対応する値を取得しているときに問題が発生するようです。

4

3 に答える 3

1

それでもインラインイベントハンドラーを保持する場合は、次のように変更します。

onclick="checkBox(this);"

そして、関数を次のように変更します。

function checkBox(chk) {
    var status = chk.value;
    document.getElementById("test").innerHTML = status;
}

onclickチェックボックスとラジオボタンの方が、よりもサポートされていることに注意してくださいonchange。また、私が提供したこの変更の理由はthis、関数に渡すと、が適用されcheckBoxた要素を参照するためです。clickそうすれば、の内部でcheckBox、パラメータchkが変更されたばかりの特定のチェックボックスになることがわかります。次に.value、単純なDOMノードであるため、で値を取得します。

とにかく、jQueryを使用してclickイベントをバインドすることをお勧めします。何かのようなもの:

$(document).ready(function () {
    $("input:checkbox").on("click", function () {
        var status = this.value;
        document.getElementById("test").innerHTML = status;
    });
});

しかし、あなたは明らかに$(this).val()の代わりに使うことができますthis.value、しかしなぜわざわざ?jQueryを使用してイベントをバインドする場合は、HTMLでonchange/インラインイベントハンドラーを削除してください。onclick

ここで、jQueryセレクターとしてinput:checkboxだけでなく、使用する理由を確認できます:http: //api.jquery.com/checkbox-selector/:checkbox

于 2012-10-30T18:54:52.243 に答える
1

あなたがするとき

$('input:checkbox').val();

必ずしもクリックされたものではなく、フォームのタイプチェックボックスの最初の入力を返しています。

実際にクリックされたものを返すには、次のようにする必要があります。

$(document).ready(function() {
    $('input:checkbox').bind('click', function() {
        clickBox($(this));
    });
});

function clickBox(field) {
    $('#test').html(field.val());
}
于 2012-10-30T18:42:14.047 に答える
0

jqueryを使用する場合、なぜインラインイベントを気にするのですか?

あなたはそれを次のように書くことができます:

$(':checkbox').change( function(){

      $('#test').html( $(this).val() );
      //`this` is the checkbox was changed 

     //for check if item is checked try:

       $(this).is(':checked') // boolean
});

チェックボックスを配置する前にそのコードを渡す場合は、ドキュメントの読み込み時にそのコードを呼び出すようにしてください。

$( function(){ 
   //code from above here
});

jQueryたくさんのサンプルで十分に文書化されています。私はあなたがそれを好きになると思いますdocs.jquery.com

于 2012-10-30T18:55:55.433 に答える