从 IE 中的值读取负数时,jquery 返回 0

Posted

技术标签:

【中文标题】从 IE 中的值读取负数时,jquery 返回 0【英文标题】:jquery returns 0 when reading a negative from value in IE 【发布时间】:2011-06-25 18:37:30 【问题描述】:

我是 jQuery 新手,今天偶然发现了一些意想不到的结果。使用 jquery 从 LI 元素中选择值时,如果值为负而不是正确值,IE 将返回 0。在 Chrome 中,下面的代码会抛出一个带有 -1 的警报,但在 IE 中它显示为 0。有什么想法吗?

<html>
    <head>    
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>  
    </head>
    <body>
    <script>
        $(function () 
            $(".ui-selected", this).each(function () 
                alert(this.value);      
            );
        );
   </script>

    <ol>
        <li class="ui-selected" value="-1" />
    </ol>

    </body>
</html>

【问题讨论】:

仅供参考 w3schools.com/tags/tag_li.asp - value 是 LI 标记的已弃用可选属性,可让您指定有序列表的值。鉴于我将改用 data-value 或@Josiah 下面提到的类似内容 【参考方案1】:

不确定原因,但是 value 不是列表项元素的属性。如果您需要自定义值,请使用 data-value 属性(或其他)。

请参阅此示例以获取更多信息jsfiddle

<ul>
    <li value="-1" data-value="-1"></li>
</ul>

$('li').each(function()
    alert(this.value); // 0
    alert($(this).attr('data-value')); // -1
)

【讨论】:

我不确定value 不是li 元素的属性/属性。当li 没有任何value 属性集时,我得到0 的值。 jsfiddle.net/znNaN 似乎暗示 li 可以/确实有 value 出于某种原因。 MDC 显示一个值属性。嗯......从来不知道它 +1 对于您的data- 建议,假设 OP 打算使用自定义属性。【参考方案2】:

您并没有真正使用 jQuery 来获取值。我不知道为什么 IE 会这样,但我会说尝试使用 .attr()本机 getAttribute 来获取值。

alert( $(this).attr('value') );

alert( this.getAttribute('value') );

@Josiah Ruddell 注意到 .attr() 不起作用。

【讨论】:

@patric - .attr('value') 似乎没有改变结果。 @Josiah:你试过getAttribute吗?我现在无法访问 IE。 getAttribute 成功了——我现在在 IE 中得到了正确的结果。这是典型的必须使用 getAttribute 而不是直接赋值的典型情况吗? @adamnickerson:不一定。有许多直接映射到属性的有效属性。我对&lt;li&gt;value 属性知之甚少,不知道为什么IE 返回0。可能只是一个错误。如果要更新属性,可能需要使用setAttribute 来满足IE。我一定会做一些测试。 @patrick:在使用 .attr() 时,在 IE 中使用除“值”以外的自定义属性名称对我来说效果很好【参考方案3】:

编辑:不要使用“值”使用任何其他属性名称。 查看更新后的working example here

即使"value" 不是一个有效的 HTML 属性,jQuery 也无法识别它,它的属性选择器也能正常工作。

不存在无效选择器之类的东西。它要么返回,要么不返回。

<ul>
    <li  class="ui-selected" myVar="-1" >
        Hi
    </li>
</ul>



$(".ui-selected").each(function()
    var liValue =  $(this).attr('myVar');
    var intVal = parseInt(liValue); 
    // Just to be safe you've retrieved only an integer!

    alert(liValue);
);

【讨论】:

IE 在使用.attr()时给你-1? 嗯,是的,但你原来的答案是value,问题是关于从value 属性中获取预期值。

以上是关于从 IE 中的值读取负数时,jquery 返回 0的主要内容,如果未能解决你的问题,请参考以下文章

NuxtJs 从 jquery 更改的输入中获取值

jQuery中的筛选

jQuery中的筛选

jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法

jquery如何输出数组中某个特定值

减少mysql中的值但不是负数