gpt4 book ai didi

Javascript - 将函数作为字符串传递,如果存在则执行

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:51 24 4
gpt4 key购买 nike

我有一个 javascript 库,它确实将结果列表返回到在 keyup 事件上触发的 div。我想使用 Jquery 将标准的 keyup 事件应用于具有特定类的所有页面上的所有字段。那部分我可以做,而且效果很好。我的问题是我使用的参数是动态的,其中最后两个是可选函数。

<input type="text" 
class="font8_input" name="wsFromPart"
value="<%=wsFromPart%>" id="wsFromPart"
size="20" maxlength="20"
onfocus="javascript:fncAjaxClear()"
onkeyup="javascript:fncAjaxSearch('wsDatabase','..\\AjaxBrowses\\PartBrowse.asp','wsFromPart','wsFromPartList','fncPrePartAjax',null);"/>

目前,为了控制它,如果我没有函数,我会传递 null。

我正在努力使我能够像这样定义所有字段。

<input type="text" class="PartClass" name="wsFromPart" value="<%=wsFromPart%>" id="wsFromPart" />

其他所有内容都将通过 Jquery 设置类/事件来添加。

我正在尝试研究如何测试我的页面上是否存在某个函数,并且仅在存在时才执行。我试过将函数名称作为字符串传递,但似乎无法正常工作。我最后的尝试是拥有一个通用函数,并将可能存在的函数的名称传递给该函数以进行评估,如果是函数,则执行它。

<input type="text" class="font8_input" name="wsFrPt" id="wsFrPt" size="20" maxlength="20" value="<%=wsFrPt%>"  onfocus="javascript:fncAjaxClear()" onkeyup="javascript:fncAjaxSearch('wsDatabase','..\\AjaxBrowses\\PartBrowse.asp','wsFrPt','wsFrPtList',fncCheckFunction('fncPreAjaxPart1'),'fncPostAjaxPart');"/>


function fncAjaxSearch(wsDb,wsAsp,wsId,wsTarget,wsPreFunction,wsReturnFunction) {
var myDate = new Date();
var myDate1 = myDate.getTime();
if (objXHR.readyState == 4 || objXHR.readyState == 0) {
var wsDatabase = escape(document.getElementById(wsDb).value);
var wsStr = escape(document.getElementById(wsId).value);
var wsParam = "";
if (wsPreFunction !== null) {
wsParam = wsPreFunction();
}
//Only do ajax call if the 'source' field is not empty, otherwise empty target and clear border.
if (document.getElementById(wsId).value > '') {
objXHR.open("GET", wsAsp + '?qryDatabase=' + wsDatabase + '&qryDummy=' + myDate1 + '&qrySearch=' + wsStr + wsParam, true);
objXHR.onreadystatechange = function(){if(objXHR.readyState==4){fncAjaxSearchReturn(objXHR,wsId,wsTarget,wsReturnFunction)}};
objXHR.send(null);
}
else {
document.getElementById(wsTarget).innerHTML = '';
document.getElementById(wsTarget).style.borderWidth = '0px';
}
}

最佳答案

如果是全局的,可以这样做

var fnc = window["yourFunctionName"];  //Use bracket notation to get a reference
if( fnc && typeof fnc === "function" ) { //make sure it exists and it is a function
fnc(); //execute it
}

如果它是命名空间的,你可以做同样类型的事情,只是涉及一些循环。

var myFnc = "foo.bar.fun";
var nameParts = myFnc.split("."); //split up the string into the different levels
var fnc = window; //set it to window
for(var i=0;i<nameParts.length;i++){ //loop through each level of the namespace
fnc = fnc[nameParts[i]];
if(!fnc){ //make sure it exists, if not exit loop
fnc = null;
break;
}
}
if( fnc && typeof fnc === "function" ) { //make sure it exists and it is a function
fnc(); //execute it
}

关于Javascript - 将函数作为字符串传递,如果存在则执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com