2012-03-13 51 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');

相關問題