2009-08-05 12 views
1

ASP.NET MVCとjQueryを使用しています。データがページコントロールにロードされる前にJQueryが起動する

私のjsファイルにこのコードがあります。ユーザーがラジオボタンをクリックすると、特定のdivを非表示にして表示する必要があります。私はまた、トリガーメソッドを使用してページの負荷でこれを起動したいと思います。私の問題は、イベントがトリガされたときにモデルからのデフォルト値がコントロールにロードされず、両方のチェックボックスがfalseになっているようです。私のコードは正しかったようですが、トリガーはあまりにも早く発砲しています。私のモデルデータがコントロールにロードされるまで、jQueryのトリガが起動しないように指示する方法はありますか?

$(function() { $('table#ScheduleTable 
input.DailyFrequency, 
input.WeeklyFrequency').click(function() 
{ 
    if ($(this).attr('checked') == true & $(this).val() == "Daily") { 
     $('.dailyOption').children().show(); 
     $('.weeklyOption').children().hide(); 
    }; 
    if ($(this).attr('checked') == true & $(this).val() == "Weekly") { 
     $('.dailyOption').children().hide(); 
     $('.weeklyOption').children().show(); 
    } }); 

$('table#ScheduleTable 
input.DailyFrequency, 
input.WeeklyFrequency').trigger('click'); 
}); 

答えて

0

コードが次のように更新されました。今すぐ動作します。あなたの返信をありがとう! :)

$('table#ScheduleTable input.DailyFrequency, 

input.WeeklyFrequency ')(関数(){ UpdateScheduleView(); }をクリックしてください。)。

function UpdateScheduleView() { 
    if ($('input.DailyFrequency').attr('checked') 

==真){ $( 'dailyOption。')、子供()ショー()。。。 $( '。weeklyOption')。children()。hide(); } else { $( '。dailyOption')。children()。hide(); $( '。weeklyOption')。children()。show(); }}

if ($('table#ScheduleTable input.DailyFrequency').length > 0) { 
    UpdateScheduleView(); 
-1

があなたの代わりにreadyイベントを使用shoudl:

$(document).ready(function() { 
    // do you jquery initialization here 
    $('table#ScheduleTable.... 
    ... 
}); 

http://docs.jquery.com/Events/ready

+0

彼は$である(関数(){})== $(ドキュメント).ready – redsquare

+0

$(FN)及び$へのショートカット(ドキュメント).ready(FN)は同じです... –

0

は、私はちょうどFirefoxでそれを試してみましたが、$(関数(){})としている$(ドキュメント).ready .ready形式はjqueryで推奨されているようですが、(function(){})は同じように動作するようです。たぶん$(document).loadはうまくいくでしょう。なぜなら、一部のブラウザではデフォルト値が後で埋められることがあるからです。 すべてのブラウザで同じように動作するのか、または一部のブラウザでのみ動作するのでしょうか?

+0

は、ieとchromeで同じように動作します – littlechris

+0

私はちょうどコードを見ました。 1)イベントをバインドします。 2)クリックイベントハンドラを3回起動します(チェックボックスの古い値を使用) 3)チェックボックスの状態を変更します。 チェックボックスの「変更された」イベントにバインドする方がよいでしょうか? – ondra

+0

ええ、私はそれを持っていると思います。クリック後に 'click'イベントが発生した場合、 'checked'属性はNEW状態を示します。 'click()'または 'trigger(' click ')'を使用して起動すると、OLD状態が表示されます。これはjqueryコードのエラーである可能性があります。 – ondra

1

どのようにページに値を読み込んでいますか?通常は、HTML出力にあるように問題はありません.JQueryは、$(function(){}ロジックを使用してロードされるまで待機します。

トリガーは$ AJAX呼び出しが完了したら、それだけですぐにページがロードされると、クリックイベントを実行します。

あなたが例えば、AJAXを経由して値をロードしている場合は、トリガーを呼び出す必要があります。

0

は何が起こります代わりにこれらのコマンドをチェーンする場合はどうすればいいですか?

$(function() { $('table#ScheduleTable 
input.DailyFrequency, 
input.WeeklyFrequency').click(function() 
{ 
    if ($(this).attr('checked') == true & $(this).val() == "Daily") { 
     $('.dailyOption').children().show(); 
     $('.weeklyOption').children().hide(); 
    }; 
    if ($(this).attr('checked') == true & $(this).val() == "Weekly") { 
     $('.dailyOption').children().hide(); 
     $('.weeklyOption').children().show(); 
    } }).trigger('click'); 
}); 

私はあなたの現在のスクリプトで、jQueryが最初にクリックイベント機能を設定していると思っています。そして、それが調整されているので、jQueryはトリガーイベントを設定するために移動しました。

おそらく、それらをチェーンすると、jQueryはトリガーを割り当てる前にクリックセグメントを終了させるでしょうか?

関連する問題