6

我们有这种“奇怪”的情况,当在 jquery click 函数中检索时,存储在数据属性(例如 data-prodcode)中的某些产品代码(例如 11E6)被转换为 11000000。像这样的东西:

    <a data-prodcode="11E6">click</a>
    var code = $(this).data('prodcode');
    console.log(code); --> 11000000

关于如何避免这种行为或可能导致这种行为的任何建议?

4

1 回答 1

7

文档中:

每次尝试都将字符串转换为 JavaScript 值(这包括布尔值、数字、对象、数组和 null),否则将其保留为字符串。要将值的属性作为字符串检索而不进行任何转换,请使用 attr() 方法。

您可以使用attr以避免自动解析:

var code = $(this).attr('data-prodcode');

更准确地说:这不应该发生。事实上,它不会在最新版本中发生。这是 current 的 jQuery 的代码(最有趣的部分是注释):

    if ( typeof data === "string" ) {
        try {
            data = data === "true" ? true :
                data === "false" ? false :
                data === "null" ? null :
                // Only convert to a number if it doesn't change the string
                +data + "" === data ? +data :
                rbrace.test( data ) ? jQuery.parseJSON( data ) :
                    data;
        } catch( e ) {}

它适用于 jQuery 1.8 和 1.9:如果反向转换不产生相同的字符串,它不会将字符串转换为数字。但它在 jQuery 1.7 中不起作用。

于 2013-02-18T16:25:25.987 回答