0

jsFiddle で動作する jQuery スクリプトがありますが、実際の Web サイトでは動作せず、これ以上のことは考えられません。

ここにフィドルがあります

ウェブサイトはこちら

クリックすると、他の多くのチェックボックスがチェックされるチェックボックスが必要です。

$("form input[id='selectall']").click(function () {
    var inputs = $("form input[class='produse4export']");
    for (var i = 0; i < inputs.length; i++) {
        if (this.checked) {
            inputs[i].checked = true;
            checkme();
        } else {
            inputs[i].checked = false;
            uncheckme();
        }
    }
});

これらのチェックボックスが (一度に) チェックされている場合、他のチェックボックスを有効にする必要があります。それらがチェックされていない場合、残りのチェックボックスは再び無効にしてチェックを外す必要があります (チェックされている場合)。

ちょっと説明が難しいですが、フィドルもウェブページも読みやすいです。期待どおりに動作しないのはなぜですか?

4

2 に答える 2

3

ブロックが作用する要素のscriptにブロックを移動する必要があります。

それが jsFiddle で機能する理由は、jsFiddle が、イベントから呼び出される関数にすべてのスクリプトを配置するという、真に脳死状態の 驚くべきデフォルト動作を備えているためです。window#load(これは左側に表示されています。上から 2 番目の選択ボックスです。) したがって、jsFiddle では、すべての HTML が解析され、要素が存在するまで、スクリプト コードは実行されません。しかし、Web サイトでは、コードが作用する要素の上にコードを配置しているため、それらを取得しようとすると、それらはまだ存在しません。

物をどこに置くかについてのモットーは、「スタイル、コンテンツ、スクリプト」です。スタイルシート (インラインとリンクの両方) をドキュメントの上部に配置し、コンテンツを本文 (当然のことながら) に配置し、スクリプトをすべてのコンテンツの最後に配置します。そうすれば、スクリプトの実行時に要素が DOM に存在します。

以下も参照してください。

于 2013-05-19T10:25:10.007 に答える
1

フィドルでは、ページの読み込み時にイベントをバインドしています。あなたのページでは、ページ自体の解析中にそれを実行しようとしています。

ページで、イベント ハンドラー バインディング コードを次のように変更します。

$(document).ready(function() {
    $("form input[id='selectall']").click(function () {
        ...
    });
});
于 2013-05-19T10:24:58.340 に答える