2013-11-04 84 views
0

開始,我是jquery的初學者,我有這個小問題,我不知道如何解決。我試圖用JSFiddle調試,但我沒有成功,所以在這裏我的問題:jquery選擇器:屬性值以

我有兩個div元素,在第一個div我有幾個文本框,在第二個div我有我的按鈕。我希望當我點擊按鈕時,第一個div中的特定文本框變爲空白。

好吧,整個畫面是我不知道事先的文本框名稱(列表是取,ASP.NET MVC自動命名我的輸入字段),所以我唯一知道的是我想清空名稱屬性值以「input1」結尾的第一個文本框(其開頭是自動生成的)。我也知道我感興趣的文本框就是我的按鈕之前的文本框。我希望我很清楚。

這裏是我的小提琴這是不工作:http://jsfiddle.net/XvTNh/1/

任何幫助會感激!

HTML:

<div class="myClass1"> 
<input name="fdsgginput1" type="text" value="Salé sucré"/> 
<input name="gfsginput2" type="text" value="Macarons"/> 
</div> 

<div class="myClass2fdsff"> 
<input type="submit" name="envoyer" /> 

JS:

$("div[class^='myClass2']").on('click','input[name="envoyer"]',function(){ 
$(this).closest('input[name$="input1"]').val(''); 
}); 

回答

2

你基本上試圖圍繞DOM導航。 closest不會去尋找HTML中可能附近的其他元素。而是上升到DOM樹,查看祖先元素,並查看是否有任何元素與您傳遞的選擇器匹配。

由於你想要的元素不是祖先元素,所以它不會被找到。實際上,你需要添加一個共同的祖先元素(在現實中你的HTML可能已經包含了一個),然後結合closestfind找到元素:

$("div[class^='myClass2']").on('click', 'input[name="envoyer"]', function() { 
    $(this).closest('.container').find('input[name$="input1"]').val(''); 
}); 

fiddle

+0

謝謝,它像一個魅力!我不知道最接近不能通過div搜索,知道我有一個更好的圖片如何jquery工作 – user2948152

+0

或者,像'$(this).parent()。prev()。find('input [name $ =「input1」]')。val('');'也可能工作,這取決於確切的HTML結構。 –

+0

@EiríkurFannarTorfason實際上,我個人發現,依靠像'parent'和'prev'這樣的單步遍歷方法在將來會更容易導致問題,例如,當HTML被修改時。 – lonesomeday

0

試試這個

$("body").find('input[name$="input1"]').first().val(''); 
+0

感謝您的幫助,這個答案的問題是我的實際代碼比這更復雜。我有幾個元素的名字以input1結尾,我甚至不知道我是否對頁面的第一頁感興趣。 (一個列表被提取)寂寞的解決方案是最合適的 – user2948152

0

試試這個:

<script> 
$(document).ready(function(){ 
    $('.myClass2fdsff input[type=submit]').click(function(){ 
     $('.myClass1 input:first').val(''); // Empty first textbox 
     $('.myClass1 input[name*=input1]').val(''); //Empty input with input1 in name 
    }); 
}); 
</script> 
+0

謝謝你的幫助Joao。然而它不符合我的實際需要=/Lonesomeday解決方案就是我一直在尋找的! – user2948152