javascript - 为什么input的属性值=text,而li的属性值=number?

标签 javascript jquery attributes typeof

http://jsfiddle.net/3GTtF/2/

<ul>
    <li class="first" value="45">fortyfive</li>
    <li class="second" value="4text5">45</li>
</ul>

<input value="45">

var whatIsValue = $('.first').val();            //  = 45     typeof = number
var whatIsSecondValue = $('.second').val();     //  = 4      typeof = number
var whatIsInputValue = $('input').val();        //  = '45'   typeof = string

为什么 var whatIsSecondValue = 4 而不是 '4text5'

为什么 var whatIsInputValue = '45' 而不是 45

最佳答案

至于为什么我不确定,但是 li 标签不应该有 value 属性。您应该改用 data-* 属性。它是无效/不正确的 HTML 语法。

如下图

<ul>
    <li class="first" data-value="45">fortyfive</li>
    <li class="second" data-value="4text5">45</li>
</ul>


var whatIsValue = $('.first').data('value');
var whatIsSecondValue = $('.second').data('value'); // = 4text5 typeof = string
var whatIsInputValue = $('input').val();

更新

显然在 HTML5 中曾经可以使用 value 属性,请参阅下面的评论。在这种情况下,您可以使用 .prop() 或 .attr() 方法来解决此问题。

另一个更新

因为在 HTML5 中,li 的值属性默认是整数/数字类型。至于为什么将字符串 trim 为 4,这是一个谜。

enter image description here

关于javascript - 为什么input的属性值=text,而li的属性值=number?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145933/

相关文章:

jQuery 事件处理程序仅适用于第一个元素

javascript - 表单对 Javascript 没有反应

c - 为什么必须在 typedef 中指定此对齐属性?

c# - 如何使用来自模型属性的动态模式创建 regularExpressionAttribute

jquery - 覆盖 jQuery 样式值

javascript - 如何计算一个值在没有突变的情况下在数组中出现的次数

javascript - Jquery Mobile - 默认情况下启用 Ajax,但我在 POST 上刷新了整页

javascript - 如何更改剑道绑定(bind) html 输入的值

javascript - 将 JSON 数据放入变量中

javascript - jQuery 单击不适用于 ie7/8 中的选择选项