2012-09-10 66 views
1

爲什麼這不起作用?jQuery。每個循環字符串或對象

$(["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和預期值。

--- UPDATE ---

我剛看到的HTML被寫入頁通過AJAX,並在.ready() :(感謝您的幫助所有,大加讚賞執行。

+2

你的代碼看起來很好。你確定'window.location.pathname'包含選項嗎? –

+2

不應該是$(「#blog」,「#user」,「#forum」)? –

+0

你的代碼是在'ready'還是'load'塊?您的複選框可能尚未初始化。 –

回答

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

+0

請參閱上面的修訂。 – Jongosi

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

你是完全正確的關係,thx男人! – Jongosi

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

Thx,第一次匹配後退出循環就是期望的行爲。 – Jongosi

相關問題