0

我已经定义了 afunction用于在 a 中显示一些html内容jqueryui dilaog

function ui_window(title, dialogWidth, content,buttons,className)
{
  $('<div id="window">').html(content).
  dialog({
      title: title,
      show: 'drop',
      hide: 'drop',
      width: dialogWidth,
      buttons: buttons,
      close: function (ev, ui) { $(this).remove(); },
      position: { my: 'center', at: 'center', of: window }
}
   ).addClass(className);
  return false;
}

这是另一个function调用上述内容的javascript function

function checkForValidCommand()
{
var content = getInnerHTML("#checkForValidCommand");
var myFunc = function ()
{
    var pensionerID = $('#txtID').val();
        alert(pensionerID);
        $(this).dialog('destroy');
    }
    else
        $('#txtID').focus();
}
var buttons = [{ text: 'OK', click: myFunc}];
ui_window("Pensioner", 410, content, buttons);

}

当我checkForValidCommand第一次调用“”并input进入value唯一textbox并按确定时,我会收到一个警报,其中包含textbox. 然后,当我function再次调用并按 OK 而不在其中输入任何内容时,textbox我仍然得到alert 旧的value. 我的代码有什么问题?

编辑:如果您想查看,这是 html 内容:

<table>
  <tr>
    <td align="right">
       <label>
           Insert the pensioiner's ID:
       </label>
    </td>
    <td>
     <input id="txtID" type="text" onkeydown="return onlyNumbers(event);" maxlength="8"/>
    </td>
  </tr>
</table>
4

1 回答 1

2

好的。我很高兴自己回答这个问题。所以问题是每次我打开一个带有文本框的新 jquery 对话框时,文本框的值就是第一个对话框中的值。不知何故,jquery 保留了旧值。即使put$(this).dialog('destroy');也没有解决问题。(为什么这个命令不能完全删除对话框是另一回事)。然后我突然想起了它的工作原理$('#id')

It goes and selects the first matching element with the specified id.

这是需要的线索。我确信之前的对话框没有从正文中删除。当我检查身体时,我发现我是对的。所有的对话都在那里,在正文中。我尝试了很多方法来完全删除 div 并停止了我发现唯一有效的方法。我所做的是在显示对话框之前输入以下代码行:

 $('body').find("#window").remove();

所以显示 jquery 对话框的包装函数现在看起来像这样:

function ui_window(title, dialogWidth, content,buttons,className)
{
  $('body').find("#window").remove();
$('<div id="window">').html(content).
  dialog({
      title: title,
      show: 'drop',
      hide: 'drop',
      width: dialogWidth,
      buttons: buttons,
      position: { my: 'center', at: 'center', of: window }
}
   ).addClass(className);
  return false;
}

现在一次只有一个对话框。快乐的 jQuerying。

于 2012-12-22T12:42:01.057 回答