2011-12-04 32 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

相关问题