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

正如评论中已经指出的那样,return false实际上将退出“博客”、“用户”、“论坛”循环,因此一旦一个pathname.indexOf条件为真,就会停止检查复选框。

此外,您可能需要添加 aconsole.log(window.location.pathname);以确保此变量包含您正在检查的内容。也许这是一个外壳问题?

如果您想知道路径名中存在哪些文字,可以使用:

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

如果您只想知道路径名中是否存在其中一种文字:

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 回答
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 回答