1

これは基本的なことかもしれませんが、この問題を理解するのに何時間もかかり、解決策が見つかりませんでした. 私は Wordpress 3.5 を使用しており、このフォルダーに general.js という外部 JavaScript ファイルがあります: wp-content/themes/[folder_name]/js。general.js では、hideError という関数を作成します。基本的には、テキスト ボックスから飛び出したエラー ラベルを非表示にします。

(function($) {
function hideErrorLabel(i) {
    //codes for handling label
}
})(jQuery);

私はそれを次のように呼びました:

<span class="component-wrapper" onmouseover="hideErrorLabel(0)">
    <input type="text" name="txtName" size="10" />
    <label for="txtName" class="error">All field must be filled.</label>
</span>

これらのテキスト ボックスは配列であるため、パラメーターを渡します。奇妙なことに、「hideErrorLabel が定義されていません」という JavaScript エラーが表示されます。何が悪かったのか?助けてください。

4

3 に答える 3

2
(function($) {
 /* code */
})(jQuery);

DOM が解析された後に、指定した が確実/* code */に実行されるようにします。ただし、これによりhideErrorLabel、パーサーがonmouseover属性を解釈しようとしたときに定義されなくなります。

これを修正するには、次のセクションでもイベント ハンドラーを変更する必要があります。/* code */

(function($) {
function hideErrorLabel(i) {
    //codes for handling label
}

$('.component-wrapper').on('mouseover',hideErrorlabel);
})(jQuery);
于 2013-01-06T14:52:50.080 に答える
1

そのjavascriptコードの最初と最後の行を削除するだけです。あなたはあなたの機能を隠しています!スクリプトタグで公然と宣言します。

<script type="text/javascript>
function hideErrorLabel(i) {
  //codes for handling label
}
</script>
于 2013-01-06T15:00:22.180 に答える
1

これが発生する理由はいくつかありますが、最も単純ではない最も安全な答えは、イベント バインディングをコードに移動することです。委任を使用することもできます。関数のスコープを探しているだけであれば、インデックスは必要ありません。インデックスが必要な場合は、場所を暗黙的に取得するか、データセット値を使用して PHP を介して明示的に提供することができます。

次のようなものが必要なようです。

(function($) {
  $(function() {
    $(document).on('mouseover', '.component-wrapper', function(event) {
      var $wrapper = $(event.currentTarget);
      $wrapper.find('.error').hide();
    });
  });
})(jQuery);

ただし、必要に応じて、外部関数を呼び出したり、追加のロジックを提供したりするように適応させることができます。

于 2013-01-06T15:10:03.593 に答える