6

この「奇妙な」状況では、データ属性(data-prodcodeなど)に格納されている11E6などの一部の製品コードが、jqueryクリック関数内で取得されたときに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');

より正確に言うと、これは起こらないはずです。そして実際、それは最後のバージョンでは起こりません。これが現在の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で機能します。逆変換で同じ文字列が生成されない場合、文字列は数値に変換されません。しかし、jQuery1.7では機能しませんでした。

于 2013-02-18T16:25:25.987 に答える