编辑: 这是一个JSFiddle,它显示了我遇到的问题:
http://jsfiddle.net/gyhvpmgy/4/
我有以下功能创建动态div:
InvalidField.prototype.getMessageStructure = function(){
var div = $('<div></div>').addClass('invalidRow');
var span = $('<span></span>')
.text(this._message)
var button = $('<button></button>')
.addClass('btn_AlertFocus')
.text("Go To Field")
.data("field", this._field[0].name)
return div.append(button).append(span);
};
在返回行之前,通过调试,我可以看到button.data(&#39;字段&#39;)包含,应该:&#34; applicant.email&#34;。
我还有以下通用按钮点击事件:
$(document).on('click', '.btn_AlertFocus', function() {
var field = $(this).data('field');
goToFieldFromAlert('input[name="' + field + '"]');
});
&#39;字段&#39;现在是未定义的。
有人能够告诉我为什么,它可能会显而易见 - 这对我来说是一个新功能吗?
以下是获取此返回字符串值的代码段。
function validateForm(){
if(list_Invalid.size() > 0){
var structure = "";
for ( i = 0; i < list_Invalid.size(); i ++){
structure += list_Invalid.item(i).getMessageStructure()[0].outerHTML;
}
var alert = new Alert(structure,
function(){
}
).showAlert();
return false;
}
return true;
}
非常感谢!
答案 0 :(得分:2)
jQuery使用内部表示来处理data
。
如果您最初在HTML元素上有data
属性,那么执行$('foo').data('bar')
会导致jQuery将该属性读入内存。进一步使用data
进行修改,不会导致属性发生变化。
如果您首先没有该属性,那么jQuery将在内存中与data
一起使用,该属性将永远不会出现在HTML中。
要显式更新HTML属性,请使用:
$('foo').attr('data-bar', 'value');
但速度较慢并将值转换为字符串。