ajax成功后设置数据属性

时间:2013-02-20 12:52:51

标签: javascript coffeescript

我有这样的输入:

<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

提前致谢

1 个答案:

答案 0 :(得分:1)

HTML5 data-属性与jQuery的.data()方法之间存在很大差异。虽然jQuery将读取所有data-属性(一次,第一次运行$(foo).data()),但它永远不会将它们写入DOM。来自文档:

  

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

所以你的发现完全可以预料到。如果您实际上需要该属性不在HTML源代码中,则无需执行任何操作。如果由于某种原因,您将不得不使用.attr()方法。