2

我正在使用 twitter bootstrap 和 jquery validate 插件

我有一个看起来像这样的表单行:

<div class="form_row" >
<div class="control-group">
    <label class="control-label" for="input01">home phone</label>
      <div class="controls">
        <input type="number" class="span4" class="input-xlarge" id="home_phone" name="home_phone" value="<?php echo $this->property->home_phone ?>" rel="popover" data-content="Re-enter your home phone." data-original-title="homephone" >
        <input type="number" class="span4" class="input-xlarge" id="cell_phone" name="cell_phone" value="<?php echo $this->property->cell_phone ?>"  rel="popover" data-content="Re-enter your cell_phone." data-original-title="cell_phone" >
      </div>
</div>

验证后,当我在 firebug 中查看它时,有错误的输入后面是 span.error。我想选择这些输入。到目前为止,我有:

$.filter(function() { return $(this).next("span.error"); })

但我收到以下错误:

类型错误:elems 未定义 [中断此错误]

返回 elems.length === 1 ?

任何人都可以在这里帮我一把吗?

谢谢,

账单

4

3 回答 3

4

你试过这个吗?

$("input").filter(function() { return $(this).next("span.error").length == 1; })
于 2012-08-20T20:34:58.413 回答
0

试试这个:

$('input').filter(function(index) { return typeof($(this).next("span.error")!='undefined'); })
于 2012-08-20T20:41:45.477 回答
0

只需选择span.error元素,然后返回到input元素:

​var inputs = $('span.error').prev('input');

JS 小提琴演示

顺便说一句,这种方法(在 Chromium 19 中)比使用这些方法更快(尽管只是略微filter()) 。显然,这是一个微优化。当然,假设浏览器支持document.querySelectorAll()previousElementSibling,使用原生 DOM 方法会更快。但老实说,并没有我预期的那么多。

参考:

于 2012-08-20T21:01:32.673 回答