2012-02-15 4 views
0

WYSIWYGを使用して他の人が作成したWebサイトをカスタマイズしています。私はそれにjavascriptを持っているhrefがついています。手作業でhrefやonClickをjavascriptで起動します。

このアンカータグのonClickは、hrefをキャプチャして、#の値に変更し、preventDefaultにしてから、実際に実行する予定のものを実際に実行できますか?私はこれがちょっと奇妙だと知っていますが、現在IEのエラーを引き起こしています。私はそれを修正すると信じています。

HTML:

<a class="cpMonthNavigation" href="javascript:CP_refreshCalendar(3,1,2012);">&lt;&lt;</a> 

のjQuery:

$(document).click({namespace: this}, function (e) { 
    var t = e.data.namespace; 

    if ($(e.target).is($(".cpMonthNavigation"))) { 
     e.preventDefault(); 

     $(e.target).attr("href").replace(/javascript:/i, ""); 
     // This is where I need to manually run the function that was in the HREF 
    } 
} 

その私が編集HTMLはできませんのでご注意下さい。私はそれに固執しているとそれはひどいです。

ベンダーコードが実行されず、実際にはhrefに実行されるように、デフォルトを防止する必要があります。このアンカーのクリックにバインドされたベンダーコードには、背後には複数のものがあります。

+0

クリックをキャプチャして同じことをしたいのはなぜですか? – gdoron

+0

ベンダーのjavascriptにはアンカータグを毎回クリックして*すべての*アンカータグのクリックを追跡する機能があります。私は(私は編集することはできません)ベンダーのjavascriptを停止する必要がありますが、まだhrefにあるjavascriptを実行します。 –

答えて

1

は、jQueryのコードのこの部分を試してみてください:

$(".cpMonthNavigation").click(function (e) { 
    e.preventDefault(); 
    var expression = $(this).attr("href"); 
    eval(expression); 
    $(this).attr("href", "#"); 
}; 
+0

これは私がキャプチャしている元のコードを実行しません。 –

+0

@JesseAtkinsonさんがあなたの質問に誤解しました。答えを更新しました。 –

0

あなたは機能を呼び出すためにevalを使用することができます。しかし、それはJavascript Programmingの悪い習慣とみなされます。私のようなオブジェクト内の関数を定義する、のだと思うことができ

他の方法、そして、

var operations = { 
    CP_refreshCalendar : function(mm, dd, yyyy){ 
           //your code 
    } 
} 

、クリックイベントハンドラから、あなたは

$(document).click({namespace: this}, function (e) { 
var t = e.data.namespace; 

if ($(e.target).is($(".cpMonthNavigation"))) { 
    e.preventDefault(); 

    var hrefVal = $(e.target).attr("href").replace(/javascript:/i, ""); 
    var funcName = hrefVal.substring(0, hrefVal.indexOf('(') - 1); 
    var args = hrefVal.substring(hrefVal.indexOf('('), hrefVal.index(')') - 1); 
    args = args.split(','); 
    if(funcName in operations){ 
     operations[funcName].apply(window, args); 
    } 

} 
} 

私はてもよい行うことができますこの複合体を作る。しかし、私はevalを使用しません。

私はこれが役立つことを願っています。

1

私は、単純に関数を実行するのではなく、必要とされるよりも、これは単純な作りのデフォルトを防止することができる。ここで

$(document).on('click', 'a.cpMonthNavigation', function(e) { 
    e.preventDefault(); 
    var myHref = $(this).attr("href"); 
    myHref = myHref.replace(/javascript:/i, ""); 
    var myNewFunc = myHref.replace(/javascript:/i, /""/i); 
    eval(myNewFunc); 
}); 

作業例: http://jsfiddle.net/MarkSchultheiss/Vta56/

EDIT:上記の短いバージョン:

$(document).on('click', 'a.cpMonthNavigation', function(e) { 
    e.preventDefault(); 
    eval($(this).attr("href").replace(/javascript:/i, "")); 
}); 
+0

他のリンクがある場合は、 ''a.cpMonthNavigation、a.newclass''の部分にクラスを追加してください。 –

+0

注:私の上記のコードは、他のクリックで関数を壊さないようにオリジナルのhrefを残しています。その部分が本当に 'href = '#''になるようにします(各ステップを明示するために上記のビットを残してください)。 –

+0

ありがとうございます! –

関連する問題