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 工作正常,它返回数据,我检查了一下。

现在,如果我设置$(that).data "lineaid", datos.id并检查它是否写入 dom,它不会。但是如果我写 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-属性(一次,第一次运行$(foo).data()),但它永远不会将它们写入 DOM。从文档:

data- 属性在第一次访问 data 属性时被拉取,然后不再被访问或改变(然后所有数据值都存储在 jQuery 内部)。

所以你的发现完全在意料之中。如果您实际上不需要该属性位于 HTML 源代码中,则无需执行任何操作。如果出于某种原因这样做,则必须改用.attr()方法。

于 2013-02-21T09:31:45.687 回答