【问题标题】:javascript calling a function with params on window objectjavascript在窗口对象上调用带有参数的函数
【发布时间】:2013-05-03 17:23:25
【问题描述】:

所以我尝试调用这个方法:

refreshMoradaLabel = function(idPlaceHolder) {...};

带有窗口对象:

窗口 [ refreshMoradaLabel('id') ] ();

但这似乎不起作用。只有当方法没有参数时。 有没有办法使用window [ variable ] () 语法?

编辑;

好的,代码如下:

moarada.jsp 有这些方法的代码:

<c:set var="methodOnClose" value="refreshDynamicValues" />
<c:if test="${empty fieldInstance || (not empty fieldInstance && isTramitacao)}">
  <c:set var="methodOnClose" value="refreshMoradaLabel(${dfieldId})" />
</c:if>
<a class="texto" href="#" onclick="editMoradaPopup('${dfieldId}','${methodOnClose}');" id="moradas_${dfieldId}"><img alt="${moradaDes}" src="${pageContext.request.contextPath}/images/icon/icon-pesquisa.png"></a>

window.refreshMoradaLabel = function(idPlaceHolder) {

    alert("label:" +idPlaceHolder);
    if($F(idPlaceHolder) != '') {
        //Update label
        new Ajax.Updater(idPlaceHolder+'_label', 'moradaPopupLocaleAware.do2?method=getLabel', 
                {method: 'get', parameters: 'id='+$F(idPlaceHolder)});
    }

};

window.editMoradaPopup=函数(idPlaceHolder,方法){ 警报(idPlaceHolder); Ext.onReady(函数(){ action = "${pageContext.request.contextPath}/moradaPopupLocaleAware.do2"; action += "?method=edit&id="+$(idPlaceHolder).value;

        action += "&idPlaceHolder="+idPlaceHolder;
        action += "&savemorada=true";
        action += "&window=winchoose";      
        return ExtWindowAll('${moradaDes}',action,'','html',true,true,true,650,400,true,true,'fit', method);
    });

};

ExtWindowAll 方法最终从另一个 js 文件调用代码,结果调用关闭窗口事件,方法名称字符串(refreshMoaraLabel)包括可能的参数:

winchoose.on('关闭', function( p ) { if(functionOnClose) {
alert("方法:"+functionOnClose); var substr=functionOnClose.match(/(([^)]*))/); 变量参数=''; if(substr!=null){ 参数=substr[1]; 参数="'"+参数+"'"; }

        debugger;
        if(window[functionOnClose]) {
            window[functionOnClose](param);
        }
    }
});

【问题讨论】:

    标签: javascript window


    【解决方案1】:

    试试这个方法:-

    Window Context 需要将函数名作为字符串。

     window ["refreshMoradaLabel"]();
    
      window ["refreshMoradaLabel"]('id');
    

    相反,您尝试在窗口上下文中调用该方法。

    窗口 [ refreshMoradaLabel('id') ] ();当你这样做时,你试图调用未定义的refreshMoradaLabel('id') 的结果。因为 refreshMoradaLabel('id') 在到达窗口的函数调用 () 之前首先被执行。

    【讨论】:

    • 请不要介意window ["refreshMoradaLabel"]();之间的空格
    • 好的,谢谢大家的回答,明天试试,然后返回approve.regards,
    • 还没试过这个。希望明天我还能选择答案。
    • 好的没问题它会工作检查这个小提琴jsfiddle.net/J8t3D或者更确切地说jsfiddle.net/5ZG9B
    • 我认为我在获取该方法时遇到了问题。窗口 ['method']() 调用与具有实际功能的页面不同。我已经编辑了答案以反映更详细的上下文。
    【解决方案2】:

    window 对象包含名称为 refreshMoradaLabel 的属性。要访问该属性,我们可以使用点或方括号表示法:

    window.refreshMoradaLabelwindow['refreshMoradaLabel']

    该属性的值是一个函数。要调用它,我们添加括号:window.refreshMoradaLabel('id')window['refreshMoradaLabel']('id')

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多