为什么这不起作用?
$( ["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()
上执行:(感谢所有人的帮助,非常感谢。
答案 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一起使用时,此解决方案引起了严重的问题。当我们在页脚中调用此函数时,布局消失了。