1

これが機能しないのはなぜですか?

$( ["blog","user","forum"] ).each(function(num,opt) {
    if ( window.location.pathname.indexOf(opt) != -1 ) {
        $('#rb-' + opt).attr('checked','checked');
        return false;
      }
});

入力$('#rb-blog').attr('checked','checked');すると期待どおりに動作しますか?

console.log(typeof opt)stringと期待値を生成します。

- - アップデート - -

html が ajax 経由でページに書き込まれ、.ready():( で実行されるのを見たところです。

4

3 に答える 3

1

ページが完全にロードされておらず、#rb-blogまだ利用できない場合に考えられる問題。

$(document).ready(function(){
    $( ["blog","user","forum"] ).each(function(num,opt) {
        if ( window.location.pathname.indexOf(opt) != -1 ) {
            $('#rb-' + opt).attr('checked','checked');
            return false;
        }
    });
});
于 2012-09-10T14:29:32.243 に答える
0

解決策: HTML コンテンツはまだページに書き込まれていないため、ajax リクエストが完了するのを待ってから、関数を呼び出して選択値を更新します。

// apply checked to the selected element
function setAsChecked() {
    $.each(["blog","user","forum"], function(num,opt){
        if (window.location.pathname.indexOf(opt) != -1) {
            $('#rb-' + opt, '.radio_menu').attr('checked','checked');
            return false;
        }
    });
}

// $('.radio_menu').ajaxStop(function(){
//  setAsChecked();
// });

// UPDATE! ajaxStop() catches all our ajax events - not cool. Instead, use when
$.when( $.ajax("") ).done(function(){
    setAsChecked();
});

多分それは他の誰かの頭痛の種を救うでしょう!

- - 編集 - -

警告してください!このソリューションを CakePHP で使用すると、大きな頭痛の種になりました。フッターでこの関数を呼び出すと、レイアウトが消えました。

このスレッドを参照してください: CakePHP の戻るボタンと進むボタンにレイアウトがありません

于 2012-09-10T15:45:35.577 に答える
0

コメントで既に述べたように、return false実際には「ブログ」、「ユーザー」、「フォーラム」ループを終了し、1 つのpathname.indexOf条件が true になるとチェックボックスのチェックを停止します。

console.log(window.location.pathname);また、この変数にチェック対象のものが含まれていることを確認するために a を追加することもできます。おそらくそれはケーシングの問題ですか?

パス名に存在するリテラルを知りたい場合は、これを使用できます。

var isPresent = [];
$( ["blog","user","forum"] ).each(function(num,opt) {
    if ( window.location.pathname.indexOf(opt) != -1 ) {
        $('#rb-' + opt).attr('checked','checked');
        isPresent.push(opt);
    }
});

リテラルの 1 つがパス名に存在するかどうかだけを知りたい場合は、次のようにします。

var isAtLeastOneIsPresent = false;
$( ["blog","user","forum"] ).each(function(num,opt) {
    if ( window.location.pathname.indexOf(opt) != -1 ) {
        $('#rb-' + opt).attr('checked','checked');
        isAtLeastOneIsPresent = true;
    }
});
于 2012-09-10T14:34:42.173 に答える