我正在尝试使用<label>
在JQuery UI Dialog对象上显示一些文本。但似乎总是失去价值。以下是我设置值的代码段:
function populateDialog(intMeterID) {
$.ajax(
{
type: "POST",
url: "/WS.asmx/GetMeterSettingsByMeterID",
data: "{intMeterID:" + intMeterID + "}",
async: false,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(msg) {
var strMeterName = msg.d.MeterName;
$("label[for='lblMeterID']").text(intMeterID);
$("label[for='lblMeterName']").text(strMeterName);
然后在按钮上单击我然后尝试从标签中获取值,但它是空的。但是,msg.d.MeterName确实包含数据!
function saveMeterDetails() {
var intMeterID = $("label[for='lblMeterID']").text();
var strMeterName = $("label[for='lblMeterName']").text();
HTML:
<div id="dialog-form">
<div style="height: 200px; min-height: 109px; width: auto;" id="dialog">
<table>
<tr>
<td>
<label style="display:none;" for="lblMeterID" />
<label style="font-weight:bold;" for="lblMeterName" />
</td>
</tr>
<tr></tr>
<tr></tr>
[...]
任何想法为什么?
答案 0 :(得分:1)
我认为这是一个范围问题。当成功回调被称为'intMeterID'时,该范围内并不存在。即使您在初始通话期间通过了它。您需要将其作为全局变量,或者将其作为来自ajax调用的数据传回。
代码现在可以正常工作,因为您删除了将未定义文本设置为标签的错误调用。
答案 1 :(得分:0)
我认为这实际上与标签本身无关。我认为intMeterID在'success'回调时是空的。这就是为什么它删除该行后它可以工作的原因。
你实际上在做什么'success:function(){blah}'定义了一个新函数,只要请求成功,就会调用它。那时'intMeterID'未知。
如果你真的需要它,或者让ajax调用阻塞或(我最喜欢的)将变量服务器端添加到你的ajax结果中,你可以使它成为一个全局变量。
编辑:嗯,没关系,我刚读过你已经找到了答案。显然我错了:)