3

SoftwareAGwebMethods開発IDEでjQueryのコントロールを使用しようとしています。..次のURLからjQueryのスクリプトをインポートしています。

http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

webMethods IDEによってデプロイされたページを実行すると、複数のブラウザーで次のエラーが発生します(2つの青い矢印の間)。

ここに画像の説明を入力してください

真ん中のエラーは通常のエラー(つまり、横に青い矢印が付いたエラー)です。これは、ページ内の他の何かが「$」を使用しているためです。jQueryもそれを使用すると、次のようになります。この他の'$'ユーザーは、'$'記号を制御できるため、混乱します。

これを確認するために、これが私がしたことです:

CAF.model私は次のJavaScriptコードを書きました( ..の内部使用について心配する必要はありません。その.id関数は、jQueryが処理に必要とするコントロールのクライアント側IDを返します)

alert($(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());

...そしてそれは上の写真に示されているそれらの'getAttribute'エラーの別の1つをもたらしました..

次に試しました:

jQuery.noConflict();
alert(jQuery(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());

そして、エラーはありませんでした..!

また、コードを使用する場合:

jQuery.noConflict();
alert($(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());

その結果、下の青い矢印エラーが発生します。「$」記号を使用している他のエンティティは、関数「val」が何であるかを理解できないためです。

上記は、jQueryのスクリプトがおそらくそこで独自に使用するために「$」記号を使用しているためにエラーが発生していることを確認しています。

これを解決するために、jQuery独自のスクリプトファイルを呼び出すスクリプトブロックの前に別のスクリプトブロックを追加して、次のコードを挿入しました。

jQuery.noConflict();

そして、これにより最初の青い矢印エラーが発生しました。..'jQuery'は、ドキュメントの早い段階で定義されていません。これは理にかなっています。

したがって、基本的に、メインのjQueryスクリプトファイルにも「$」記号を使用しないように指示する必要があります。これを行うにはどうすればよいですか。

4

3 に答える 3

2

jQuery.noConflict();jQueryがロードされた直後にスクリプトブロックで実行する必要があります。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
    var jq = jQuery.noConflict();
</script>

上記は、jqの代わりにjQueryをエイリアスします$

jQueryへのプラグインはjQueryオブジェクトを渡し、それを内部的にエイリアスします$が、スコープはグローバルではないため、プラグインで変更する必要はありません。

于 2012-03-09T12:18:59.303 に答える
0

jQueryの内部について心配する必要はありません。どのような場合でも機能します。

.val()最後のエラーメッセージは、jQueryオブジェクトではなくDOM要素でjQueryメソッド()を呼び出そうとしていることを意味します。

あなたはすでにそれを知っています

$(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id)

エラーが発生するので、なぜjQuery.noConflict()これを変更する必要があるのでしょうか。

jQuery.noConflict()単に「解放」$して、以前に持っていた値を割り当てます。

コード全体で使用するかjQuery、コードを別の変数に割り当てる必要があります。例:

var $j = jQuery.noConflict();
$j(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id);

イベントハンドラーは、最初のパラメーターとしてjQueryへのready参照も受け取るため、すべてのjQueryコードをそこに配置する必要があります。

jQuery(function($) { 
    // $ will refer to jQuery
});

$ただし、その関数の外部を参照する値にアクセスすることはできません。

于 2012-03-09T12:15:27.077 に答える
0

これを行う良い方法は、次のような自己実行関数を使用することです。

(function ($) {

  // Your jQuery code here - just use $ as normal!
  $("#coolselector").cooljQueryPlugin();

})(jQuery);

ページの読み込みを高速化するために、これを終了bodyタグの直前のコードに入れてください。CAFとPrototypeを使用していても、スピードアップに気付くことはありません:)

于 2014-01-08T14:42:40.863 に答える