代码之家  ›  专栏  ›  技术社区  ›  IsmailS

从jQuery ready外部调用jQuery ready内部定义的函数

  •  2
  • IsmailS  · 技术社区  · 14 年前

    我的aspxpage:-

      <script src="js/jquery-1.4.2.js" type="text/javascript"></script>
      <script src="js/jquery-ui-1.8.2.custom.js" type="text/javascript"></script>
    
      <script type="text/javascript">
        $(document).ready(function () {
          //lots of other code here....
          function showMessage(){
            $("#msgDiv").dialog({
                            modal: true,
                            buttons: {
                                      Ok: function() {
                                              $(this).dialog('close');
                                          }
                            },
                            resizable: true,
                            show: "explode",
                            position: "center",
                            closeOnEscape: true,
                            draggable: false
                          });
          }
        });
       </script>
    

    从上面的页面触发的另一个aspx弹出页面

    <script type="text/javascript">
    
        window.opener.document.getElementById("msgDiv").innerHTML = <%=MessageToShow%>; //works very well for me.
        window.opener.document.showMessage(); // I am unable to access it like this?
        window.close();
    
    </script>
    

    基本上我想打电话 showMessage()

    3 回复  |  直到 14 年前
        1
  •  4
  •   James Curran    14 年前

    据我所知,你想做的事,做不到。那么,我们到底能做什么呢?

    我认为最简单的想法就是搬家 showMessage ready 函数,并从内部调用它。

    现在,如果它确实必须在该函数中定义,请将其设为命名函数:

      function calledonready()
      {
          /// stuff
          function showMessage(){ 
          /// stuff
          }
       }
    
    $(document).ready(calledonready);
    
    window.opener.document.calledonready.showMessage(); 
    
        2
  •  14
  •   Bennor McCarthy    14 年前

    $(document).ready(function() {
    
        window.showMessage = function() {
            //...
        };
    
    });
    

    然后您应该可以从其他文档调用它,如下所示:

    window.opener.showMessage();
    

    showMessage();
    
        3
  •  3
  •   jAndy    14 年前

    你可以申报 showMessage() 把它直接放在你的 <script>

    更好的解决方案应该总是使用自己的命名空间。宣布 object 所有的应用程序逻辑都可以在这里发生。

    <script>
    var MyApp = {
        showMessage:   function(){
           // do something
        }
    };
    

    在以后的代码中,您可以使用

    MyApp.showMessage();
    

    你可以通过使用 closures . 很多聪明的人都为未来发展出了很好的模式 ecmascript 因此。道格拉斯·克罗克福德的《Javascript:好的部分》是一本很好的读物。

    var MyApp = function(){
        var my_private_data = "version 1.0.0",
            foo             = "bar";
    
         return {
            getfoo          = function(){
                 return(foo);
            },
            showMessage     = function(){
                 // do something
            }
         };
    };
    
    var app = MyApp();
    
    app.showMessage();
    

    一切都是为了 private data namespacing closured 对象。这个想法甚至可以通过创造 inheritance shared data