Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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
Javascript jQuery多个内部回调和作用域_Javascript_Jquery_Scope - Fatal编程技术网

Javascript jQuery多个内部回调和作用域

Javascript jQuery多个内部回调和作用域,javascript,jquery,scope,Javascript,Jquery,Scope,服务器发送一些JSON。它包含结构化数据的列表。我将这些数据显示为文本框列表,每个文本框都有自己的onClick事件。单击时,文本框的值设置为结构化数据中的任何内容(这是一个唯一的ID,这意味着每个文本框在单击时都应显示ID) 当我第一次单击任何文本框时,它的值设置正确——使用来自服务器的数据的ID。但当我点击其他文本框时,它们会显示第一次点击文本框时的ID 我尝试了闭包var和$.proxy(),但它们似乎都不起作用。我已经检查了myAttribute的内容,它们在$.each()函数的每次迭

服务器发送一些JSON。它包含结构化数据的列表。我将这些数据显示为文本框列表,每个文本框都有自己的
onClick
事件。单击时,文本框的值设置为结构化数据中的任何内容(这是一个唯一的ID,这意味着每个文本框在单击时都应显示ID)

当我第一次单击任何文本框时,它的值设置正确——使用来自服务器的数据的ID。但当我点击其他文本框时,它们会显示第一次点击文本框时的ID

我尝试了闭包var和
$.proxy()
,但它们似乎都不起作用。我已经检查了
myAttribute
的内容,它们在
$.each()
函数的每次迭代中都会发生变化。但是,
click()
事件似乎是在“运行时”进行计算的,不会更新

问题是:

  • 如何解决问题,使
    myProcessedAttribute
    包含正确的数据,而不是第一次单击时的数据
  • 我觉得我使用四个嵌套函数的方法可能不是最佳实践。。还是这样
  • 代码:

    $.ajax({
    [...]
    成功:功能(数据){
    [...]
    $.each(data.listOfData,函数(){
    [...]
    var myAttribute=this.mycolattribute;//创建对话框时调用“创建”事件。
    第二次打开对话框时,不会触发创建事件,因为该元素上已存在对话框对象。
    如果您想在同一对话框小部件上使用不同的值,请使用“打开”事件。
    这是一个样本


    你能在JSFIDLE上发布一个演示吗?
    $.ajax({
      [...]
      success: function (data) {
        [...]
        $.each(data.listOfData, function () {
          [...]
          var myAttribute = this.myCoolAttribute; // <-- closure
          jQuery('<p/>')
          [...]
          .click(function () {
            var myProcessedAttribute = process(myAttribute);
            [jquery ui dialog...]
            create: function () {
              // it always contains the same data
              // the data on first click, after that, it never changes.
              $("#myDialog").html(myProcessedAttribute);
            }
          });
        });
      }
    });