2011-05-06 19 views
2

我認爲這應該是一個簡單的 - 有人告訴我我正在犯什麼明顯的錯誤!jquery .children()選擇器:表格中的表格

我有一個簡單的HTML表單:

<form action="/api/userattributes" method=get> 
<select name=action> 
<option>read_by_user</option> 
<option>set</option> 
<option>delete</option> 
</select> 
Attrib Name: <input name=name type=text size=20 value=""> 
Attrib Value: <input name=value type=text size=50 value=""> 
<br /> 
<input type=submit name="Go!"> 
</form> 

這想摸一些輸入字段的形式,他們得到在提交前一個簡單的jQuery功能:

$(function() 
{ 
    $("form").submit(function() 
    { 
     $(this).children(':input[value=""]').each(
      function() { 
       $(this).attr("disabled", "disabled"); 
     }); 
     return true; // ensure form still submits 
    }); 
}); 

使作品精細。但是如果我用表格格式化表單,我的函數不再做任何事情。好吧,我想,也許問題是表單元素的孩子是表格元素(儘管這似乎很奇怪),所以我嘗試.find()而不是.children(),它再次與香草版本一起使用,但不與表格版本。

那麼如果我的表單在表格中,我該如何找到表單字段呢?

+0

您能否顯示不起作用的版本的標記? – 2011-05-06 04:57:41

+0

「用表格格式化」..你能否澄清一下。? – Misam 2011-05-06 04:59:14

+1

表格格式化效果稍差:

...
工作正常,但是
失敗。活到老,學到老。 – 2011-05-06 05:22:01

回答

4

您可以發佈您table代碼,因爲我在你會使用一些表格佈局做了一個猜想,有一個工作示例很快:http://jsfiddle.net/3wCk9/

注意我發現了兩個錯誤:

  1. 你選擇是':input[value=""]',我改變了對'input[value=""]'
  2. 需要使用find而非children你懷疑:

如果提供的jQuery代表 一組DOM元素,在。孩子() 方法允許我們通過這些元素 DOM樹

來源的 直接子搜索:http://api.jquery.com/children/

編輯:

它聽起來就像你發現了你自己的解決方案一樣,我想我最好把它包含在這裏作爲參考。

您使用:

<table> 
    <form> 
    <tr> 
     <td> 
     <input> 
     </td> 
    </tr> 
    </form> 
</table> 

而你應該切換<form><table>左右(像你一樣),從而使<table>被嵌套在裏面form

正如您發現的那樣,您不能在<table>內自由地使用元素(所有內容都必須在行和列中)。因此,雖然看起來好像行和列都在form之內,但事實證明它們實際上並沒有嵌套在其中,因此不在find方法搜索的後代中。

+0

如果屬性值沒有空格,則HTML4和HTML5都允許省略屬性引號。 XHTML需要引號,但是他沒有說他使用的是XHTML,而從輸入標籤的格式來看,他並不是。 (雖然'br'標籤指向另一個方向。) – 2011-05-06 05:05:12

+0

我試着用引號包裝屬性,沒有改變。我的代碼中有一個關閉窗體標籤,我無意中將其隱藏在此處,並進行了修改以解決此問題。 – 2011-05-06 05:06:53

+0

@ T.J。克勞德,好吧,你去,你學到的東西。 – 2011-05-06 05:07:32