我无法改变功能范围

时间:2012-09-20 01:34:04

标签: javascript jquery scope

我有一个大型机和一个iframe:

  1. 我将一个函数beforeIframe传递给mainFrame。
  2. mainFrame changse beforeIframe to changedIFrame。
  3. 加载changedIFrame后,执行匿名函数。
  4. 以下代码是我想要做的:

    mainFrame.jsp

    function randerLeftMenu(callBack) {
        $("#ifrm").attr("src", "<ui:context />/changedIframe")
        if(callBack) {
            $("#ifrm").load(function() { callBack(); });
        }
    }
    

    beforeIframe.jsp

    (我必须操纵DOM对象。)

    parent.randerLeftMenu(function() {$("#docType").val("aaa"); });

    changedIframe.jsp

    <input type="text" value="testVal" id="docType" class="input width2">
    

    我尝试了很多东西,但我无法做到。

    mainFrame中

    function randerLeftMenu(callBack) {
        if(callBack) {
            $("#ifrm").load(function() {
                with(this.contentWindow) { callBack(); }
                callBack.apply(this);
                eval(callBack());
                callBack.call(this);
                $.proxy(callBack(),this.contentWindow);
            });
        }
    }
    

1 个答案:

答案 0 :(得分:0)

在您的示例中,您在{before {1}}调出“{1}}中包含的$将始终作用于调用它的上下文。只有randerLeftMenu变量可以动态绑定到不同的范围。你应该能够通过将函数作为字符串传递(或依赖于this的{​​{1}}方法)并动态评估字符串来解决这个问题。

更新以包含工作示例(经过测试的Firefox和IE):

Function