9

これがどのように可能かを理解しようとしています...

$(function() {
   $('#saveBtn').click(save());
});

function save(){
    alert('uh');
}

.

<form id="video-details" method="post" action="">
    <input id="saveBtn" class="submit" type="submit" name="submit" value="Submit Video" disabled/>
</form>

関数にブレークポイントを設定しましたsave()が、クリック イベントがリストされている行の無名関数によって呼び出されています。ただし、これはロード時に直接発生しています。入力が非表示で無効になっているため、クリックする方法がないことは言うまでもありません。

クリック機能を、存在する要素と存在しない要素の両方に変更し、何を作成しても関数は引き続き起動しpageloadます。

この原因を他に調査する場所はわかりませんが、通常の動作ではないと想定しています

4

2 に答える 2

29

スクリプトを次のように変更してみてください。

$(function() {
   $('#saveBtn').click(save);
});

function save(){
    alert('uh');
}

click宣言に括弧を入れることで、関数を呼び出しています。関数名だけを使用すると、呼び出しではなく関数への参照が提供されます。

変数で呼び出す

変数を使用して関数を呼び出す場合は、クロージャーを使用する必要があります (イベントを宣言するときに変数にアクセスできると仮定します)

$(function(){
  var foo = 'bar';
  $('#saveBtn').click(
    function(){
      save(foo);
    });

function save(message){
  alert(message);
}

クロージャーの詳細については、JavaScript クロージャーはどのように機能しますか?を参照してください。.

于 2011-09-05T20:44:56.430 に答える
1

これに変更してみてください。誤ってクリックを呼び出しています

$(function() {
   $('#saveBtn').click(function (){
     save()});
});
于 2011-09-05T20:47:52.870 に答える