2011-12-04 72 views
1

我知道有可能性,使用jQuery,mix Multiple Selector with Multiple Attribute Selector,事實上,我用它。 例如,這工作得很好:是否有可能使用jQuery混合多個選擇器和過濾器?

$('input[type="checkbox"][name^="selected"]:checked', theForm).length 

在我的例子,「theForm」是含有「#form1的」,我用它來指代自己的狀態具有屬性ID =「form1的」的字符串。

那麼,問題是:是否有可能將上述內容與jQuery過濾器混合? 這裏是一個代碼示例:

var myVar = $('input[name^="modcc_"]', myForm).filter(...) 

我試圖用這個,我似乎並沒有得到在myVar的 元素,但如果我只是刪除「myForm會」這樣

var myVar = $('input[name^="modcc_"]').filter(...) 

它的工作原理..爲什麼?難道我做錯了什麼?我確信「myForm」變量是正確的「填充」(它是一個包含「#formMod」的字符串,它與我的表單的id屬性一致),並且我確信輸入是在該表單中,並且它是唯一具有該ID 。

感謝您的幫助!

P.S. 這個問題來自one of my previous I made in a comment to the accepted answer to this question沒有得到答案。我認爲它無論如何可以作爲一個問題,而不是一個簡單的評論,所以......在這裏!希望能有一個答案吧...

- 編輯 的要求,我把這裏的HTML表單代碼:

<form action="..." method="post" id="formMod" name="formMod"> 
    <input type="hidden" name="catid" value="412" /> 
    <td width="8%">412</td> 
    <td>myName</td> 
    <td width="9%" style="white-space:nowrap; background-color:LightGoldenRodYellow;"> 
     <input id="modcc_icv" name="modcc_icv" type="text" value="10" maxlength="3" size="4" />. 
     <input id="modcc_dcv" name="modcc_dcv" type="text" value="25" maxlength="2" size="3" />% 
    </td> 
    <td width="18%" class="actions_col" style="background-color:LightGoldenRodYellow;"> 
     [ <a href="...">Annnulla</a> ] 
     <input type="submit" name="confirmMod" value="Salva" /> 
    </td> 
</form> 
+0

會這樣的幫助嗎? $(「#letters option」)。filter(「[attr = a],[attr = b]」)。remove()。或者你可以嘗試使用.add()類http://api.jquery.com/add/ –

回答

1

問題是您使用無效標記。

您不能將<form>元素作爲<tr>元素的直接子元素。

你的HTML將根據瀏覽器的各種方式進行返工,並<td>元素及其內容可能會被從form去除,從而<td> s爲的<tr>的孩子。

當我把您的標記在Chrome中,這是它的呈現方式:

<tr> 
     <!-- THE FORM HAS LOST ITS CONTENT --> 
    <form action="..." method="post" id="formMod" name="formMod"></form> 

    <input type="hidden" name="catid" value="412"> 
    <td width="8%">412</td> 
    <td>myName</td> 
    <td width="9%" style="white-space:nowrap; background-color:LightGoldenRodYellow;"> 
     <input id="modcc_icv" name="modcc_icv" type="text" value="10" maxlength="3" size="4">. 
     <input id="modcc_dcv" name="modcc_dcv" type="text" value="25" maxlength="2" size="3">% 
    </td> 
    <td width="18%" class="actions_col" style="background-color:LightGoldenRodYellow;"> 
     [ <a href="...">Annnulla</a> ] 
     <input type="submit" name="confirmMod" value="Salva"> 
    </td> 

</tr> 

注意,<form>元素現在是空的。

所以這就是爲什麼你能夠找到<input>元素進行文檔搜索,但不是從表格本身的上下文。

所以它與.filter()沒有任何關係,而是事實上你並沒有首先選擇任何元素。

+0

@danicotra:另一種選擇是根本不使用'

'標記,只需使用'$ .post()'提交輸入數據。但是,這當然只能在啓用JavaScript的情況下使用。 – RightSaidFred

+0

(我使用Firefox,我看到正確的頁面源,因此...)我擔心!例如,我知道它是無效的xhtml標記,但是表單提交仍然有效......雖然希望原因可能是另一個,但不是這樣,因爲現在我無法讓表單包含整個表格,因爲每個表格錶行可以包含其他可編輯內容或操作(即其他可提交表單),例如刪除行/條目命令。 – danicotra

+0

是的,我會避免依賴$ .post()如果我不能設法重寫我的HTML,使我的窗體包含整個表格沒有嵌套窗體等,我很幸運,我仍然可以設法達到我的需要爲表單輸入使用足夠多的不同名稱,以避免選擇錯誤的名稱(不過,我喜歡我的頁面進行正確驗證,因此我會盡我所能來製作它們) – danicotra

0

你確定你沒有正確使用myForm代替theForm

這就是說,你在使用$(foo,bar)選擇器語法時所做的是在bar上下文中選擇foo元素。如果設置myForm作爲上下文不會產生結果(在沒有它的情況下選擇時),通常意味着您要麼選擇錯誤的上下文,要麼在給定的上下文中沒有任何元素與您的選擇器匹配。

這是some more reading about it

+0

是的,我確定該變量的名稱和內容是正確的...我也認爲它可以是我的輸入沒有被捕獲,因爲它們有點不在形式之中......但它們不是! – danicotra

+0

你介意發佈一些與此相符的HTML嗎? –

+0

done(已編輯的問題) – danicotra

相關問題