2011-11-23 65 views
0

給出了一系列形式的標籤和輸入元素,如中:jQuery選擇了.parent()父()

<div class="labelEditwrap"> 
    <div class="editor-label"> 
     <label for="Address">Address</label> 
    </div> 
    <div class="editor-field"> 
     <input class="text-box single-line" id="Address" name="Address" type="text" value="" /> 
     <span class="field-validation-valid" data-valmsg-for="Address"></span> 
    </div> 
</div> 

我想選擇最外層div時文本框獲得焦點,所以我可以突出顯示標籤和輸入:

$("input").focus(function() { 
    $(this).parent().parent().addClass("curFocus") 
}); 

我試過幾個的組合,包括:

$(this).parent().parent() // seems the most obvious 
$(this).parent().parents("div:first") 

另外這裏的問題king關於.parent()。parent()是通過查找與選擇器無關的語法錯誤來解決的。然而,在這種情況下,如果我只上升一個父級別(只突出顯示編輯的div),並且如果爬上3個級別(突出顯示容納完整表單的容器),則可以看到我的hightlighter類。

thx

確定....它不是選擇器。所有建議的替代品(和原始)都正確地「選擇」外部包裝div。問題在於CSS以及Floats如何應用於Label和Editor div。這個CSS會產生正確的突出顯示,並讓標籤/編輯器字段正確對齊。 [whew]

你們最好的方式來關閉/編輯/改變問題,希望幫助其他人避免我的4小時toddshooting磨難考驗。

- 高度欣賞的時間位置抽取─

+0

[JQuery的父()選擇器]的可能重複(http://stackoverflow.com/questions/7996157/jquery-parent-selector) –

+0

行....它不是選擇器。所有建議的替代品(和我的原始)都正確地'選擇'外部包裝div。問題是浮動如何應用到標籤和編輯器div: – justSteve

回答

0

可能的解決方案: -

$('.text-box').live('focus', function(){ 
     $(this).parent().parent().css('border', '1px solid red'); 
}); 

$('.text-box').live('blur', function(){ 
    $(this).parent().parent().css('border', 'none'); 
}); 

$('.text-box').bind('focus', function(){ 
    $(this).parent().parent().css('border', '1px solid red'); 
}); 

$('.text-box').bind('blur', function(){ 
$(this).parent().parent().css('border', 'none'); 
}); 
0

你提出的解決方案應該正常工作 $(本).parent() .parent(); 我認爲這裏的問題是你的事件在綁定對象之前被綁定。你準備好了文件的功能嗎? 喜歡的東西:

$(function(){ 
    $("input").focus(function() { 
     $(this).parent().parent().addClass("curFocus") 
    }); 
}); 

否則使用「活」或「上」的事件將工作動態綁定。 所以像:

$('input').live('focus', function(){ 
    $(this).parent().parent().addClass("curFocus"); 
});