jQuery .each循环字符串或对象

时间:2012-09-10 14:17:39

标签: jquery each

为什么这不起作用?

$( ["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()上执行:(感谢所有人的帮助,非常感谢。

3 个答案:

答案 0 :(得分: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;
        }
    });
});

答案 1 :(得分:0)

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

此外,您可能需要添加console.log(window.location.pathname);以确保此变量包含您要检查的内容。 Perhaps it is a casing issue?

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

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;
    }
});

答案 2 :(得分: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 no layout on back and forward button