如果没有嵌套在另一个函数中,函数将无法正常工作

时间:2012-10-29 10:14:25

标签: javascript jquery

很抱歉标题不清楚,但我发现任何不适合我的问题的东西。为了更好地解释它是什么让我告诉你我的javascript代码:

function askForIDForCommand()
{
  var content;
  $.post("Somepage.aspx", function (data)
  {
     content = $(data).find("#myDiv").html();
  });

  var myFunc = function () { }
  var buttons = [{ text: 'OK', click: myFunc}];
  ui_window("Hi", 630, content, buttons);
 }

如您所见,我声明了一个名为content的变量。然后我将指定div的html指定给它。然后我将它发送到ui_window函数,该函数只显示带有指定内容的jquery对话框。问题是我没有在对话框中获得该html内容。当我用Firebug查找“内容”的值时,我可以看到它包含html内容。让我感到绝望的是,如果我将上述功能更改为以下功能,则会在对话框中显示html内容:

    function askForIDForCommand()
{
  var content;
  $.post("Somepage.aspx", function (data)
  {
     content = $(data).find("#myDiv").html();
     var myFunc = function () { }
     var buttons = [{ text: 'OK', click: myFunc}];
     ui_window("Hi", 630, content, buttons);
  });

 }

如果您无法注意到差异,我只需将ui_window调用到$ .post()方法中。它有效。为什么?

以下是html内容以备不时之需:

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

3 个答案:

答案 0 :(得分:4)

在致电content之前,您分配给ui_window。该分配在您的anomyous函数中发生,因此直到有人调用该函数(即,一旦完成对Somepage.aspx的帖子)后才会执行。

相比之下,只要您将开始帖子发送到Somepage,就会调用ui_window(),但无需等待该操作完成。那时您的完成功能仍然没有被调用,因此content仍然包含undefined

答案 1 :(得分:2)

问题是当你收到服务器的响应时会调用内部函数。然后在第一种情况下,当执行这些行时,尚未分配变量,而在第二种情况下,您确定使用可用数据调用ui_window

答案 2 :(得分:1)

问题是对服务器的AJAX调用。在第一种情况下,您发送请求并直接转到下一个命令,即myFunc等。因此,此时您的内容变量尚未初始化。