2011-08-10 7 views
0

Prototypeとオートコンプリートテキストボックスと共にフレームワーク(Microsoft AJAX Framework)を読み込んでいます。フレームワークとオートコンプリートの両方が、いくつかのテキストボックスに動作を追加しています。私は通常、両方のスニペットを実行する必要がありますが、常にではありません。基本的に、オートコンプリート項目が選択されている場合、私はフレームワークJSを実行したくありません。別のフレームワークからJavaScript関数を上書きすることができません

私はこのようなテクニックを使用してフレームワークを上書きしようと考えました:Overriding a JavaScript function while referencing the original

var original_doSomething = doSomething; 
doSomething = function() 
{ 
    //do something *else* 
    if(something) original_doSomething(); 
} 

しかし、フレームワークは少し巧妙で、本来の機能を保持しているイベントハンドラを上書きすることは困難で証明されています。私は状況を模擬するためにjsfiddleを書いた。 http://jsfiddle.net/jeffrod/haHD4/2/

dosomethingを上書きするためにとにかく、私自身のロジックを追加できますか?

答えて

2

あなただけのこの機能を自分で変更することができます。

$(function() 
{ 
    var someObject = { 'a':'aaa' } 
    $('input').keypress(createHandler(someObject,dosomething)); 
}); 

それともkeypressを自分でハンドラ・再割り当てします。その機能は、dosomethingを自分で変更する前に、dosomethingをイベントにバインドしています。

+0

元のハンドラのバインドを解除し、次に私を元に戻す?それはあなたが意味することですか?それはうまくいくかもしれない。 – Jeff

+0

@ジェフはい、それは – Griffin

+0

です。それはうまくいった。なぜ私はそれについて考えなかったのか分かりません。私は木の森を見逃していたと思う。ありがとう! – Jeff

0

の後に他のすべてのライブラリスクリプトが実行されていることを確認する必要があります。 http://jsfiddle.net/mrchief/haHD4/5/

アップデート:ここに更新フィドルだ が原因jsfiddleのレンダリング方法に、このデモは欺くことがあります。

これは、(すべてのフレームワークスクリプトの後、上書きブロックが一番最後に登録されている注意してください)スクリプトブロックを登録する方法である:私は基本的に言っていることはこれです

<script src="MsAJax.js></script> 
<script src="Prototype.js></script> 
<script src="blahblah.js></script> 

<script type="javascript"> 
    //this represents my file that i have control over. this 
    //js snippet runs after the framework 

    window._dosomething = window.dosomething; 
    function dosomething() { 
     console.log('overwritten'); 
    } 
</script> 
+0

このフィドルは基本的に新しい 'dosomething' javascript関数をフレームワークjsファイルに入れました。私はこのファイルを編集することができないので、この解決策は私にとってはうまくいきません。なぜ私は 'dosomething'関数をマークアップのスクリプトタグに入れているのですか? – Jeff

+0

ああ、いいえ、マークアップであなたのものを置くと、常に最初に実行されます(jsfiddleがそれをレンダリングする方法です)。最後に私が言及したアイデアをデモするためにそれらを入れました。あなたのページでは、Framework jsを変更する必要はありません。すべてのフレームワークスクリプトタグの後に "上書き"スクリプトブロックが書き込まれていることを確認してください。これが理にかなってほしい。 – Mrchief

+0

@ジェフ、私の更新を参照してください。私のポイントを明確にすることを願っています。 – Mrchief

関連する問題