Jquery没有按钮标签的方法问题

时间:2011-09-28 10:13:53

标签: jquery jquery-selectors

我不知道为什么但是jquery的not()方法为两个独占的不同测试返回相同的值。

查找

<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

<script language="javascript">
    $(function() {
        $(':button, :submit').filter(function() {
            $('#result').append('tag = ' + $(this)[0].tagName + "<br />");
            $('#result').append('.not(\':submit\').length = ' + $(this).not(':submit').length + "<br />");
            $('#result').append('.not(\':button\').length = ' + $(this).not(':button').length + "<br />");
            $('#result').append('.is(\':button\') = ' + $(this).is(':button') + "<br /><br />");

        });

    });

</script>

<button>Btn1</button>
<input type="button" value="Btn2" />
<input type="submit" />

<div id="result">
</div>

结果如下:

tag = BUTTON

.not(':submit')。length = 0

.not(':button')。length = 0

.is(':button')= true

tag = INPUT

.not(':submit')。length = 1

.not(':button')。length = 0

.is(':button')= true

tag = INPUT

.not(':submit')。length = 0

.not(':button')。length = 1

.is(':button')= false

发现了一个错误?

3 个答案:

答案 0 :(得分:1)

不,这是设计的。对于button元素的特定情况,:submit过滤器和:button过滤器均为true。默认情况下,button元素具有submit类型(see the MDN docs)。

答案 1 :(得分:0)

我认为你感到困惑

.not(':submit').length = 0
.not(':button').length = 0

您的假设是错误的,您的测试独占。 jQuery文档声明:

  

:button:选择所有按钮元素 type 按钮的元素。
  :submit:选择 type 提交的所有元素。

现在,它恰好是button个元素have a type attribute,默认值是submit

  

type = submit | button | reset [CI]
      此属性声明按钮的类型。可能的值:

     
      
  • submit:创建一个提交按钮。这是默认值。
  •   
  • reset:创建一个重置按钮。
  •   
  • 按钮:创建一个按钮。
  •   

所以jQuery会返回正确的结果。 not(:button).length返回0,因为我们正在处理button元素。 not(:submit).length返回0,因为该按钮元素为type属性,其值为submit

答案 2 :(得分:0)

将过滤器(function(){})更改为每个(function(){})然后你可能很幸运。