2009-07-01 21 views
7

私はフォームとjQueryを使用してWebサイトを素早く変更しています。ボタンのテキストを「Saved!」に変更したい数秒後にUpdateに戻して、ユーザーが再度値を変更できるようにします。もちろん、彼らは今「Saved!」を打つことができます。ボタンをもう一度押しますが、うまく見えません。jQueryを使用して数秒後に入力ボタンのテキストを変更する

$("form.stock").submit(function(){ 
    // Example Post 
    $.post($(this).attr('action'), { id: '123', stock: '1' }); 
    $(this).find(":submit").attr('value','Saved!'); 
    // This doesn't work, but is what I would like to do 
    setTimeout($(this).find(":submit").attr('value','Update'), 2000); 
    return false; 
}); 

答えて

13

setTimeoutの第1引数は関数です。したがって、無名関数の中にコードをラップして、あなたは行くのが良いです。

$("form.stock").submit(function(){ 
    // Example Post 
    $.post($(this).attr('action'), { id: '123', stock: '1' }); 
    var submit = $(this).find(":submit").attr('value','Saved!'); //Creating closure for setTimeout function. 
    setTimeout(function() { $(submit).attr('value','Update') }, 2000); 
    return false; 
}); 

このコードを今すぐテストすることはできません。それが動作しない場合は教えてください。

EDIT: redsquareの示唆しているように、送信ボタン自体からクロージャを作成するのは理にかなっています。

+0

明白なことを指摘していただきありがとうございます! :) –

+1

提出セレクタを2回実行する必要はなく、setTimeout内で使用するためにvarに入れることができます – redsquare

+0

同意し、このアプローチを反映するようにコードを修正しました。 – SolutionYogi

0

あなたはおそらく、関数の中でアクションをラップしたい:

setTimeout(function(){$(this).find(":submit").attr('value', 'Update')}, 2000); 
+0

私は、この 'setTimeoutの無名関数の中では正しく動作しません。 1つはクロージャを使用して 'これ'をキャプチャする必要があります。 – SolutionYogi

0
$("form.stock").submit(function(){ 
    var $form = $(this); 
    $.post($form.attr('action'), { id: '123', stock: '1' }); 
    var $submit = $form.find(":submit").attr('value','Saved!'); 
    window.setTimeout(function() { 
     $submit.attr('value','Update') 
    }, 2000); 
    return false; 
}); 
2

私は、おそらく、フィードバックを与えるために、異なる(私の意見では、より良い)インターフェースを示唆し、ボタンのテキストを変更するよりも。 jGrowlまたはdialogウィジェットを使用して、postメソッドからのコールバックを介してメッセージを表示することができます。

+0

+1の話しやすさ(フィードバック) – karim79

6

実際には「ボタン」タグであれば、それを変更することができます。もちろん

$('#button_id').html('New Text'); 

あなたがそのボタンのため、このonClickのを予備成形している場合、あなただけで簡単にオブジェクトと$(この)の.html(「新しいテキスト」)として関数に(これを)渡すことができます。代わりに。

これは誰かを助けることを望みます。

関連する問題