js把字符串转化为function的方法

王者_来归 2017-07-29 03:50:21
如题,需要把字符串转化为function,我知道有一种方式,而且是可以转换的,就是使用eval,但是这个有个问题,在使用eval时就会去执行,我现在的要求是先不执行,比如点击按钮的时候才会去执行。
业务需求来自于我对jqgrid的封装,在jqgrid中,可以自定义按钮,平时我们经常使用到的是增删改查,我把这几个按钮的事件进行了封装,不同的实体需要执行不同的方法,否则会就乱,而要实现这个目标,就是组装唯一的方法,就会用到我上面提到的需求。或者大神们有什么其它的更好的方法对jqgrid自定义的按钮进行封装,也请赐教!
非常感谢!
...全文
3243 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
浮云若水 2017-08-11
  • 打赏
  • 举报
回复
解决办法就是,把原本相同的方法名改名可以在方法名后面加个索引,然后根据你打开Tab的顺序调用对应索引的函数
浮云若水 2017-08-11
  • 打赏
  • 举报
回复
引用 7 楼 sen_linzhiwang 的回复:
[quote=引用 6 楼 phantom7493 的回复:] [quote=引用 5 楼 sen_linzhiwang 的回复:] 我现用的就是这种方法,但是,存在一个问题,当你打开多个有jqgrid的页面时,因为你执行的方法名开始都是一样的,这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法,我现在要做的就是把每个有jqgrid页面中执行的方法不一致,这样就可以规避这种问题。
、、不好意思,没理解什么叫“执行的方法名开始都是一样的这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法”,能说详细些吗。 [/quote] 或许这样说比较好理解:当你的js中有很多同名的function,而这些同名的function执行的功能不一样,那么你在调用这个方法的时候,会不会出错? 而要解决这个问题,就是要让这些方法名不同,那么,有一种最笨的办法,就是每调用一次jqgrid,都写一个页面,然而这个不具备可拓展性,那可以把jqgrid封装在一个页面中,但这样要解决的就是如何使不同的功能在调用这个页面时,执行的方法不同,而jqgrid是封装在一个页面中的,那些执行的方法什么的会同名,当我打开(Tab)多个tab页面时,调用的方法就会出错,现在要解决的是如何让这些方法名不同。[/quote] 我看的有点懵逼了,同一个jsp页面多个相同函数名的函数 ,你说的问题估计是网页调用js多个同名函数规则问题,同名函数在网页调用过程中,参数多余实际参数个数的多的会被舍弃,参数少于实际参数少的会被看做未定义,js是弱类型语言,不影响执行,调用时永远都是调用最后出现的那个同名函数。所以导致你每次调用的是都是同一个函数。
王者_来归 2017-08-11
  • 打赏
  • 举报
回复
引用 6 楼 phantom7493 的回复:
[quote=引用 5 楼 sen_linzhiwang 的回复:] 我现用的就是这种方法,但是,存在一个问题,当你打开多个有jqgrid的页面时,因为你执行的方法名开始都是一样的,这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法,我现在要做的就是把每个有jqgrid页面中执行的方法不一致,这样就可以规避这种问题。
、、不好意思,没理解什么叫“执行的方法名开始都是一样的这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法”,能说详细些吗。 [/quote] 或许这样说比较好理解:当你的js中有很多同名的function,而这些同名的function执行的功能不一样,那么你在调用这个方法的时候,会不会出错? 而要解决这个问题,就是要让这些方法名不同,那么,有一种最笨的办法,就是每调用一次jqgrid,都写一个页面,然而这个不具备可拓展性,那可以把jqgrid封装在一个页面中,但这样要解决的就是如何使不同的功能在调用这个页面时,执行的方法不同,而jqgrid是封装在一个页面中的,那些执行的方法什么的会同名,当我打开(Tab)多个tab页面时,调用的方法就会出错,现在要解决的是如何让这些方法名不同。
wautsns 2017-07-31
  • 打赏
  • 举报
回复
引用 5 楼 sen_linzhiwang 的回复:
我现用的就是这种方法,但是,存在一个问题,当你打开多个有jqgrid的页面时,因为你执行的方法名开始都是一样的,这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法,我现在要做的就是把每个有jqgrid页面中执行的方法不一致,这样就可以规避这种问题。
、、不好意思,没理解什么叫“执行的方法名开始都是一样的这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法”,能说详细些吗。
王者_来归 2017-07-31
  • 打赏
  • 举报
回复
引用 4 楼 phantom7493 的回复:
[quote=引用 2 楼 sen_linzhiwang 的回复:] 今天是周一,最后顶一次
给你个方法,思路可以参考一下

<script type="text/javascript">
var funSet={"fun1" : "alert('hello')","fun2" : "alert('asd')"}
function execute(funName){
	eval(funSet["fun1"]);
}
</script>
<body>
    <input type="button" name="test" onclick="execute('fun1')"/>
</body>
[/quote] 我现用的就是这种方法,但是,存在一个问题,当你打开多个有jqgrid的页面时,因为你执行的方法名开始都是一样的,这样所有页面执行的方法都会是你最后一次打开的那个jqgrid页面的方法,我现在要做的就是把每个有jqgrid页面中执行的方法不一致,这样就可以规避这种问题。
wautsns 2017-07-31
  • 打赏
  • 举报
回复
引用 2 楼 sen_linzhiwang 的回复:
今天是周一,最后顶一次
给你个方法,思路可以参考一下

<script type="text/javascript">
var funSet={"fun1" : "alert('hello')","fun2" : "alert('asd')"}
function execute(funName){
	eval(funSet["fun1"]);
}
</script>
<body>
    <input type="button" name="test" onclick="execute('fun1')"/>
</body>
JOKER叔叔 2017-07-31
  • 打赏
  • 举报
回复
取出来函数里判断一下不行吗?是我想简单了还是你想复杂了
王者_来归 2017-07-31
  • 打赏
  • 举报
回复
今天是周一,最后顶一次
王者_来归 2017-07-30
  • 打赏
  • 举报
回复
沉底了,顶起来。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧