Javascript – 将函数作为字符串传递,然后执行(如果存在)

我有一个 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','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,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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)