2012-03-13 9 views
1

私のタイトルとはまったく異なる解決策があるかもしれないと言ってこの序文を書いておきます。eval()を使わずに文字列として格納された関数を実行する方法

基本的に私は一連のメニューリンクを持っています。すべてのリンクのhrefにはURL(turn.jsブックスクリプトを制御する)ではなく、jQuery関数が格納されています。だから、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> 

要求iがhrefの内容を実行する必要があるメニュー項目のclick()に...簡単です。私の最初の考えは、各リンクを実行し、hrefの一時的な文字列を格納し、次にeval()を使用することでしたが、それは私が読んだものから悪い選択肢に見えます。

私のhrefの内容を迅速かつ安全に実行するにはどうすればよいですか?

+0

あなたが持っているコードを投稿できますか? –

+0

それはまあそれです。 hrefの内容はあなたから来ていますか、それともユーザーが提供していますか?なぜなら、あなたがコンテンツをコントロールできれば、evalは悪い選択ではないかもしれないからです。 – websymphony

+0

'私のタイトルとはまったく異なる解決策があるかもしれないと言って、この質問の序文を書きましょう。私が全面的に何をしているか教えてください。また、タグも必要ありません。 –

答えて

1

のような関数を呼び出しますか?

<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で作業しているので、私のリンクに属性を追加することはできません。つまり、私はコアをハックしたくないということです。 –

+0

データを 'href'に入れることができます。投稿を編集中... –

+0

もちろん、これを試しています(私は考えました:))Wordpressは好きではなく、リンクを保存する前に完全に削除します!だから、私はおそらくこのメソッドを使用していると思うので、私はメニューに別の大きな無関係の欠陥があることを発見した。私は今や幾分静的なメニューを作成する必要があります。これはそれを行うべきです、私はまもなくお知らせします。 –

0

あなたは単にその場合のリンクでクリックイベントをシミュレートできませんか?つまり、すでにjqueryがロードされている場合は$("a#identifier").click()です。現在のシナリオでは、最も簡単な方法です。

+0

jQueryでリンクをトリガーすると、href属性内のコードは実行されません。 –

2

ここにいくつかの解決策があります。 Backboneのようなものを使って、ナビゲーションに役立つルーターと呼ばれるものを探すことができます。

または、類似した何かをハック新しい#アンカーを指すようにhrefタグのそれぞれを設定するには:

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

、その後hashchangeイベントにリスナーを添付します。イベントが発生すると、ユーザーはリンクをクリックしています。その後、ハッシュwindow.location.hashにアクセスし、必要な処理を行う関数の引数としてそれを使用します。 window.location.hash#文字が含まれているため

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

sliceがあります。


EDIT

は、私はあなたがワードプレスを使用して、あなたのURLのhttp://一部を編集していると言っ更新気づきます。以下のような関数を定義し、スクリプトで

:あなたはhashchangeイベントを使用している場合は、href="#2"が、私は同様の問題をしたhref="http://mysite.post.com/this_post/#2"

+0

'hashchange'にはブラウザのサポートに関する警告がいくつかあるので、それを処理するには何かをしなければならないかもしれません。あなたがGoogleにそれを言うなら、あなたは私が何を意味するか見るでしょう。また、後でブラウザに気付かない場合は、いつでも履歴ナビゲーションAPIを調べることができます。 – tkone

+0

これはFirefoxでは何もしていないようです。 –

+0

サンプルコードはありますか? – tkone

0

と同じであるために必要があると、このようにそれを解決しません。

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

そして、あなたのリンクのhrefのonclickイベントを使用する方法についてjavascript:$.fn.DoSomething('Hello');

関連する問題