如何在没有eval()的情况下执行存储为字符串的函数
让我先说这个问题,说可能有一个完全不同于我标题的解决方案,所以让我告诉你我完全是在追求什么。
基本上我有一系列的菜单链接。 所有链接中的href
都存储jQuery函数,而不是URL(用于控制turn.js书籍脚本)。 所以其中一个href
可能看起来像这样:
请求很简单…在菜单项的click()
上我需要执行href
的内容。 我的第一个想法是遍历每个链接并存储href
的临时字符串,然后使用eval()
但这看起来是我阅读的一个不好的选择。
那么,如何快速安全地执行href
的内容呢?
如何使用onclick事件?
Click me!
或者,既然你正在使用JQuery,你可以.bind()
事件:
Click me!
或者,由于您只能访问href
属性,因此您可以执行此操作,这是一种简单的方法:
Click me!
这里有一些解决方案。 您可能希望使用像Backbone这样的东西来提供一些可以帮助您进行导航的路由器。
或者为了破解类似的东西,将每个href
标记设置为指向一个新的#
锚:
然后将一个监听器附加到hashchange
事件。 当事件触发时,用户已单击该链接。 然后访问哈希window.location.hash
并将其用作函数的参数,该函数执行您需要它执行的操作。
$(window).on('hashchange', function(event){ $('#primary').turn('page', window.location.hash.slice(1)); }
由于window.location.hash
包含#
字符,因此slice
就在那里。
编辑
我注意到你更新了说你使用wordpress并且你正在编辑你的URL的http://
部分。 如果您正在使用hashchange
事件,则不需要,因为href="#2"
与href="http://mysite.post.com/this_post/#2"
在这种情况下,你不能简单地模拟链接上的点击事件吗? 换句话说,如果你已经加载$("a#identifier").click()
jquery $("a#identifier").click()
。 在您当前的场景中,这似乎是最简单的方法。
我有类似的问题并解决了这个问题:
在您的脚本中,定义一个函数,如:
$.fn.DoSomething=function (MyOption){ window.alert(MyOption); };
在你的链接href中调用函数,如javascript:$.fn.DoSomething('Hello');