0

<script>...</script>クロージングボディタグの前にここにあります

$(function() {
   function test(){
      alert("test");
   }
});

私のHTMLには入力タグがあります<input type="text" onchange="test()" />

テストが未定義であるというエラーが表示されます。私はIE7呼び出し関数を作成しようとしていますが、ソリューション全体が機能していましたが、IE7は入力内に属性を配置するのonchangeが好きではないため、この問題が発生します。.change()onchange

どうすればこれを解決できるのでしょうか?

4

3 に答える 3

1

testこれは匿名関数(readyハンドラー)に対してローカルであり、外の世界に公開されていないため、不明です。この関数は、ページのDOMの準備ができたときに呼び出される単なるreadyハンドラーです。公開したい場合testは、次のようなことを行う必要があります。

var eventHandlers = $(function() {
   function test() {
      alert("test");
   }

   return {test: test};
})();

これは少しやり過ぎであり、モジュールパターンを使用していてカプセル化を使用している場合にのみ必要です。これで、を使用できますeventHandlers.test()。カプセル化が問題にならない場合は、readyハンドラー内でjQueryにバインドすることをお勧めします。

jQuery(document).ready(function(){
    jQuery("#myInput").bind("change", function() {
      alert("test");
    });
});

関数を次のように定義することもできます。

function test() {
  alert("test");
}

これが最も簡単な方法です。ただし、さまざまな方法を混在させないことをお勧めします。jQueryを使用している場合は、jQueryですべてを実行することに固執してください。

于 2010-04-26T20:39:13.700 に答える
0

jquery を使用する場合は、どこでも jquery を使用してください。

$(document).ready(function(){

$('input').bind('change',function(){
alert("hi");
});

});
于 2010-04-26T20:35:27.980 に答える
0

このように使用するには、その範囲外で使用する必要があります。これのみdocument.readyを使用し、ラップは使用しません:

function test(){
  alert("test");
}

ハンドラーでラップする場合document.ready、そのスコープでのみ使用できます。そのためには、関数を外部で宣言する必要があります。ただし、次のように、jQuery でもこれを完全に行うことができます。

HTML:

<input type="text" id="myElem" />

jQuery:

$(function() {
  $('#myElem').change(function() {
    alert("test");
  });
});
//or, if you wanted the external function for another reason:
$(function() {
  $('#myElem').change(test);
});
function test(){
  alert("test");
}
于 2010-04-26T20:35:44.577 に答える