Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 对象在Dialog.open之后丢失所有函数_Jquery_Html - Fatal编程技术网

Jquery 对象在Dialog.open之后丢失所有函数

Jquery 对象在Dialog.open之后丢失所有函数,jquery,html,Jquery,Html,我有一个Javascript对象(非常简化)如下所示 if('undefined' !== typeof(listCtrls)){ for (ctrlName in listCtrls) { var ctrl = listCtrls[ctrlName]; ctrl.Initialize = function() { //Save a reference to the 'tbody' element this.tbody = $("#"+this.id+"_tbody");

我有一个Javascript对象(非常简化)如下所示

if('undefined' !== typeof(listCtrls)){ for (ctrlName in listCtrls) {
var ctrl = listCtrls[ctrlName];

ctrl.Initialize = function() {
    //Save a reference to the 'tbody' element
    this.tbody = $("#"+this.id+"_tbody");
    this.dataFetched = false;
}
ctrl.Update = function(command){
    //Go and fetch some data
    $.post(url, function(ssResponse){ ... }
    this.tbody = "fill with AJAX data";
}
ctrls.SomeMoreFunctionsAsWell() {}
}});
正如您在函数
Initialize()
中看到的,它引用了一个HTML元素。 在我将引用的HTML元素放入JQuery对话框之前,一切都很正常

对话框一打开,
ctrl
就会丢失其所有功能。我不明白为什么!如果在调用
Dialog.Destroy()
时出现问题,这是有道理的,但此错误直接发生在对话框打开后

现在,我在
Dialog.Open()过程中没有遇到常规的javascript错误。相反,当我在调用
ctrl.Update()
的对话框中单击一个元素时,会出现一个错误

未捕获的TypeError:对象#没有方法“更新”

HTML代码:

<div id="dialog_Substitute" style="display:none;" title="test">
    <div><span class="ui-icon ui-icon-info" style="style"></span>
<table style="width:100%" id="substitutelist_table">
<thead id="substitutelist_thead"><tr><th style="cursor: pointer; ">Name</th><th style="cursor: pointer; ">Valid from</th><th style="cursor: pointer; ">Valid through</th><th style="cursor: pointer; ">Incl. Authorities</th><th style="cursor: pointer; "></th></tr></thead>
<tbody class="tbodydata" id="substitutelist_tbody">
<tr style="background-color:#F2F2F2;"><td class="left" style="">Lager, Patrik</td><td class="left" style="">2011-04-15</td><td class="left" style="">2011-07-01</td><td class="left" style=""></td><td class="action left" onclick="if(¤7¤==true) {var a=¤6¤; var b='2011-04-15'; deleteItem(a,b);};return kill(event);" style=""><img src="../Styles\sctrls/delete_16.png" alt="Ta bort"></td></tr>
<tr style=""><td class="left" style="">Svensson, Marie</td><td class="left" style="">2011-04-15</td><td class="left" style="">2011-05-12</td><td class="left" style=""></td><td class="action left" onclick="if(¤7¤==true) {var a=¤6¤; var b='2011-04-15'; deleteItem(a,b);};return kill(event);" style=""><img src="../Styles/sctrls/delete_16.png" alt="Ta bort"></td></tr>
<tr style="background-color:#F2F2F2;"><td class="left" style="">Lind, Linda</td><td class="left" style="">2011-02-05</td><td class="left" style="">2011-02-27</td><td class="left" style=""></td><td class="action left" onclick="if(¤7¤==true) {var a=¤6¤; var b='2011-02-05'; deleteItem(a,b);};return kill(event);" style=""><img     src="../Styles/sctrls/delete_16.png" alt="Ta bort"></td></tr>
</tbody></table>
    </div> 
你知道为什么会这样吗

谢谢

修复顶部代码:

if ('undefined' !== typeof (listCtrls))
{
  for (ctrlName in listCtrls)
  {

    listCtrls[ctrlName].Initialize = function ()
    {
      //Save a reference to the 'tbody' element
      this.tbody = $("#" + this.id + "_tbody");
      this.dataFetched = false;
    }
    listCtrls[ctrlName].Update = function (command)
    {
      //Go and fetch some data
      $.post(url, function (ssResponse)
      {...
      }
      this.tbody = "fill with AJAX data";
      }
      listCtrls[ctrlName].SomeMoreFunctionsAsWell = function ()
      {}
    }
  }
}

您从未定义过范围之外的任何内容。

当创建jQuery对话框时,html将从主体中移出!这可能就是问题的根源所在……

事实证明(喜欢这个表达式),当打开
JQuery.Dialog()
时,它不仅移动对话框的内部HTML代码,还执行任何内联javascript代码


因为ctrl的初始值设定码就在旁边,所以它被执行了第二次,因此丢失了数据。

我找不到调用DialogMethod的地方。 但我用一行简单的代码解决了同样的问题,如果您使用链接或按钮调用jquery函数,那么该链接或按钮将继续执行DOM工作,所以您必须避免该工作,比如停止它

Jquery有一个名为e.preventDefault()的方法来实现这个功能,链接的默认操作是转到页面顶部,而e.preventDefault()页面将保持在原来的位置

但您必须将调用函数的方式更改为:

$(".SomeButtonOrLinkOrDomObjectId").click(function (e) {

    e.preventDefault(); //this does the trick.

    //then, your code...

});
希望能有帮助


再见。

抱歉,在缩短功能时丢失了。我会修好的。该对象是一个ListControl,在我的网站的许多地方都使用它。而且效果很好。但这是我第一次将它放在JQuery中。Dialog@Neal. 感谢您难以置信的承诺,使这项工作。你有权要求我在范围外不定义“ctrl”。但在内部,ctrl等于listCtrols[ctrlname],这要感谢这一行:var-ctrl=listCtrls[ctrlname]尽管如此,
ctrl
变量在范围之外不可用。@Neal,也许我误解了你。在此之前已经定义了名为“listCtrls”的数组,它包含一个名为“substitutelist”的对象。这就是FOR循环所迭代的。我在你的代码中没有看到任何对话框调用啊,是的,你的权利。(现在包括)listCtrls
来自哪里?listCtrls[“替代列表”]==ctrl@David在代码中,你在哪里声明???你认为因为tbody引用不再有效,CTRL会丢失它的所有函数(包括Update()?我更新了CTRL的所有功能,以重置对TBODY元素的引用。但仍然存在相同的错误:(
$(".SomeButtonOrLinkOrDomObjectId").click(function (e) {

    e.preventDefault(); //this does the trick.

    //then, your code...

});