2012-03-13 54 views
1

让我通过说可能有完全不同的解决方案而不是我的标题来说明这个问题,所以让我告诉你我完全是什么。如何在没有eval的情况下执行存储为字符串的函数

基本上我有一系列的菜单链接。所有链接中的href都存储jQuery函数,而不是URL(控制turn.js书本脚本)。所以href的可能看起来像这样的一个:

<li id="menu-item-68" class="home menu-item menu-item-type-custom menu-item-object-custom menu-item-68"> 
    <a href="$('#primary').turn(‘page’,1);"></a> 
</li> 

的要求很简单...菜单项上,我需要执行href的内容click()。我的第一个想法是遍历每个链接,并存储href的临时字符串,然后使用eval(),但这看起来是我阅读过的不好的选项。

那么,如何快速安全地执行我的href的内容呢?

+0

你可以发布你的代码。 – 2012-03-13 12:38:23

+0

嗯,这取决于。 href的内容是来自你的还是用户提供的?因为如果你能控制内容,eval可能不是一个不错的选择。 – websymphony 2012-03-13 12:39:34

+0

'让我先说有可能比我的标题完全不同的解决方案,以便让我告诉你,我entirely.'后那么,什么是个蹩脚的题序这个问题。它也不需要标签。 – 2012-03-13 12:40:01

回答

1

如何利用onclick事件的功能?

<a onclick="function(){$('#primary').turn('page', 2); return false;}" href="#">Click me!</a> 

或者,因为你使用JQuery,你可以.bind()事件:

<script> 
    $('a.clickable').bind('click', function(e){ 
     var pageNum = $(this).attr('data-page'); 
     $(#primary).turn('page', pageNum); 
     return false; 
    }); 
</script> 
<body> 
    <a class='clickable' data-page='2' href='#'>Click me!</a> 

或者,因为你只可以访问href属性,你可以做到这一点,这是很容易出路:

<a href="javascript:$('#primary').turn('page', 2)">Click me!</a> 
+0

这看起来不错,但我不能将属性添加到我的链接,因为它是Wordpress的工作。我的意思是 - 我可以但我不想破解核心。 – 2012-03-13 12:46:29

+0

你可以把数据放在'href'中。编辑帖子... – 2012-03-13 12:53:17

+0

当然试图(这是我想到的:))WordPress的不喜欢,并保存链接之前完全删除它!所以,无论如何,我可能会使用这种方法,因为我在菜单中发现了另一个大无关的缺陷。我现在需要创建一个有点静态的菜单,这应该做到,我马上让你知道。 – 2012-03-13 13:21:57

0

难道你不能在这种情况下简单地模拟链接上的点击事件吗?换句话说,如果你已经有jquery加载$("a#identifier").click()。在你目前的情况下,这似乎是最简单的方法。

+0

如果您通过jQuery触发链接,href属性中的代码将不会被执行。 – 2012-03-13 12:41:03

2

这里有几个解决方案。您可能想要使用诸如Backbone之类的东西,它提供了一些可以帮助您导航的路由器。

还是要砍了类似的东西,设定每个href标签指向一个新的#主播:

<a href="#2">next page</a>

,然后附加一个监听器hashchange事件。当事件触发时,用户点击链接。然后访问散列window.location.hash并将其作为参数传递给您所需要的功能。

$(window).on('hashchange', function(event){ 
    $('#primary').turn('page', window.location.hash.slice(1)); 
} 

slice是有自window.location.hash包括#字符。


编辑

我注意到你更新说你使用WordPress,你正在编辑您的网址http://一部分。如果您使用的hashchange事件中,你不需要因为href="#2"相同href="http://mysite.post.com/this_post/#2"

+0

我应该提到'hashchange'有一些浏览器支持的警告,所以你可能需要做一些处理。如果你谷歌它,你会明白我的意思。另外,如果你对后面的浏览器漠不关心,你可以随时查看历史导航API ...... – tkone 2012-03-13 12:44:20

+0

这似乎没有在Firefox中做任何事情。 – 2012-03-13 13:13:21

+0

你有任何示例代码? – tkone 2012-03-13 13:14:47

0

我有一个类似的问题,解决它像这样:

在脚本中,这样定义一个函数:

$.fn.DoSomething=function (MyOption){ window.alert(MyOption); };

而在你的链接的href调用,比如javascript:$.fn.DoSomething('Hello');

相关问题