0

データベースにクエリを実行してオンまたはオフにする簡単なチェックボックスがあります。ユーザーはこの値を変更でき、私はを介してリクエストを送信しajaxます。URLはJoomlaコンポーネントであるため、風変わりです(この質問では重要ではありませんが、念のため)。

$(function() {

$("#iButton").iButton();

$('#iButton').change(function() {
    var checkedLength = $(this + ':checked').length;
    if(1 == checkedLength){
        $.ajax({
            url: 'index.php?option=com_mycomponent&task=globaldetection&id_hash=<?php echo $id_hash; ?>&global_monitoring='+checkedLength+'&format=raw'
        });
    } else {
        $.ajax({
            url: 'index.php?option=com_mycomponent&task=globaldetection&id_hash=<?php echo $id_hash; ?>&global_monitoring='+checkedLength+'&format=raw'
        });
    }
});

});

<?php
//highlight whether the checkbox is on or off
if ($userstatus == "ENABLED") //get this value from server
{
    //turned on
    $global_monitoring = "checked=\"checked\"";
}
else
{
    $global_monitoring = "";
}

?>
    <div class="dropshadow">
    <p id="iButtontext">
      <input type="checkbox" id="iButton" <?php echo $global_monitoring; ?> name="iButton_checkbox" />
    </p>
    </div>

これは正常に機能し、期待どおりですが、ここでいくつか質問があります。

  1. ajax条件に応じて関数を2回複製します。これを行うためのより良い方法または完全に受け入れられる方法はありますか?
  2. URLのみを渡し、他の設定は渡しません。私はいつもsuccessこの設定を使用しましたが、この場合、他に行う必要のある応答はありません。私はそれがオプションであることを知っていますが、その時点で何か他のことをする必要がありますか?
  3. ajaxに渡す必要がある他の設定はありますか?それも...シンプルに思えます。

任意のガイダンスをいただければ幸いです。ありがとう。

4

1 に答える 1

1

if / else構造体はまったく必要ありません。どちらのブランチでも同じコード行があるため、そのコード行を単独で配置すると機能します(値は引き続き使用されますcheckedLength)。

ただし、$(this + ':checked').length意味がありません。セレクターは文字列を オブジェクト':checked'の末尾に連結します。現時点では、それがどのように機能するかわかりません。結果を「長さ」として取得する同等の方法は、であり、これは一種の不格好です。または、同じジョブを実行する場合よりもはるかに複雑な場合を除いて、を使用してブール値としてテストできます。 this$(this).filter(':checked').lengthif ($(this).is(':checked'))this.checked

チェック状態を直接取​​得できることthis.checkedを考えると、次の方が簡単だと思います(そして間違いなくより効率的です)。

$('#iButton').change(function() {
    $.ajax({
       url: 'index.php?option=com_mycomponent&task=globaldetection&id_hash=<?php echo $id_hash; ?>&global_monitoring='
            + (this.checked ? 1 : 0) + '&format=raw'
    });
});

(私は、.lengthあなたが最初に使用していたのは、idで選択した要素でのみ、0またはイベントが発生したためであると想定しています。)1

「私はURLのみを渡し、他の設定は渡しません。私は常に成功設定を使用しましたが、この場合、他に行う必要のある応答はありません。オプションであることはわかっていますが、その時点で何か他のことをする必要があります。 ?」

いいえ。成功時に何もする必要がない場合は、成功コールバックを指定しないでください。ただし、何らかの理由で呼び出しが機能しない場合に備えて、エラーコールバックを指定することをお勧めします。

于 2012-12-03T02:25:53.523 に答える