0

次のような入力があります。

<input class="txthoras" type="text" value="" data-fetxa="2013/02/24" data-lineaid="">

私の CoffeScript ファイルでは、次のような関数を記述します。

$('.txthoras').blur ->
   that=this
   url = Routing.generate('post_lineas')
        $.ajax url,
            type: "POST"
            data: { proyectoid: proyectoid, hitoid: hitoid, tareaid: tareaid, usuarioid: usuarioid, fetxa: fetxa, totalhoras:that.value }
            contentType: "application/json"
            success: (data) ->
              $(tr).effect "highlight" , {}, 1500
              $(that).effect "pulsate", { times:3 }, 1000
              datos = undefined
              if data is "null"
                $("#divmaterialincorrecto").show "slow"
              else
                datos = jQuery.parseJSON(data)
                $(that).data "lineaid", datos.id

            error: (xhr, ajaxOptions, thrownError) ->
              $(tr).effect "highlight", { color:"#CC3232"}, 1500
              $(that).effect "shake", { times:3 }, 300
              console.log "Errorea"
              alert xhr.status
              alert thrownError

ajax は正常に動作し、データが返されることを確認しました。

ここで、dom に書き込まれているかどうかを設定$(that).data "lineaid", datos.idして確認すると、書き込まれません。しかし、console.log$(that).data "lineaid"と書くと、データが表示されます。

実際には、このデータが必要な別の関数 (PUT) があり、起動時には空です。

助けや手がかりはありますか?

CoffeScript のすべてのコード: http://pastebin.com/WcQcNnPz JavaScript のすべてのコード: http://pastebin.com/RtZ02Wh4

前もって感謝します

4

1 に答える 1

1

data-HTML5属性と jQuery の.data()メソッドには大きな違いがあります。jQuery はすべての属性を読み取りdata-ますが(初回実行時に 1 回$(foo).data())、それらを DOM に書き込むことはありません。ドキュメントから:

data- 属性は、 data プロパティが最初にアクセスされたときに取得され、その後はアクセスまたは変更されません (その後、すべてのデータ値は jQuery に内部的に保存されます)。

したがって、あなたの調査結果は完全に期待されています。属性を HTML ソースに含める必要が実際にない場合は、何もする必要はありません。何らかの理由でそうする場合は、代わりに.attr()メソッドを使用する必要があります。

于 2013-02-21T09:31:45.687 に答える