jQuery';getter()只获取最初使用值设置的元素
。。。但是,如果该值最初为空(如“”),则不能使用同一个键更改该值jQuery';getter()只获取最初使用值设置的元素,jquery,Jquery,。。。但是,如果该值最初为空(如“”),则不能使用同一个键更改该值 function loadDialog(link, e, ajaxRequest) { e.preventDefault(); var $title = link.innerHTML; var $contenturl = $(link).attr('href'); var $dialog = $('<div id="MyDialog"></div>'); //
function loadDialog(link, e, ajaxRequest) {
e.preventDefault();
var $title = link.innerHTML;
var $contenturl = $(link).attr('href');
var $dialog = $('<div id="MyDialog"></div>');
// Read value from hidden input field
var templateIdValue = $('input[name=TemplateId]').val();
// Change the value: This will always and only happen the 2nd time I come here,
// the first time the templateIdValue will always be empty
if (templateIdValue != '') {
templateIdValue = 777;
}
$dialog.load($contenturl).data('templateIdKey', templateIdValue).dialog({
title: $title,
autoOpen: true,
modal: true,
buttons: {
"OK": function () {debugger;
ajaxRequest($(this), $('form', this));
},
"Cancel": function () {
$dialog.dialog("close");
}
}
});
}
即使在更新之后,我也发现您的问题相当混乱,因此我仍然不太明白您想做什么,但您使用
.data()
的方式似乎存在两个大问题
第一个问题是在文档就绪处理程序中检索值:
$(document).ready(function () {
var templateId = $('#MyDialog').data('templateIdKey');
…但是在响应单击调用loadDialog()
函数之前,不会存储该值。因此,由于尚未处理任何单击操作,因此,此时自然不会有该键的数据
其次,每次单击多个元素中的任何一个时,您都会调用相同的loadDialog()
函数,但每次调用loadDialog()
时,它都会创建一个新的“MyDialog”
div,然后使用.data()
将键和值与该新div关联:
var $dialog = $('<div id="MyDialog"></div>');
// other code, then
$dialog.load($contenturl).data('templateIdKey', templateIdValue)
var$dialog=$('');
//那么其他代码
$dialog.load($contenturl.data('templateIdKey',templateIdValue)
同样,您的问题并不清楚,但您似乎在说,您希望这会更新为先前创建的
“MyDialog”
div存储的值,但是.data()
会将值与单个元素关联。为什么每次都要重新创建对话框div?“但是如果该值最初为空”-如果该值最初为空.data()
不会在元素上创建或更新数据-
属性,如果这是您的意思的话。从何处调用loadDialog()
?是的,它可能存储在$.cache中。这对我来说也很困惑@nnnnnn将值“templateIdValue”与templateIdKey一起传递给.data(key,value)方法。loadDialog()是一个通用函数,每次单击a标记(链接)时都会调用它。好的,但是从哪里调用loadDialog()
?它是在尝试使用该值的document.ready处理程序之后调用的吗?@n*6我更新了我的初始帖子!我已经更改了链接/对话框的创建,现在.data()对我来说很好。我现在已经删除了general loadDialog函数,并为每个对话框调用设置了一次对话框,例如openTemplate、createTemplate等的对话框设置。。。啊,我现在才意识到,我每次都重新创造它:P
$(document).ready(function () {
var templateId = $('#MyDialog').data('templateIdKey');
var $dialog = $('<div id="MyDialog"></div>');
// other code, then
$dialog.load($contenturl).data('templateIdKey', templateIdValue)