从 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:不一定。有许多直接映射到属性的有效属性。我对<li>
的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的主要内容,如果未能解决你的问题,请参考以下文章