2009-08-05 48 views
1

我正在使用ASP.NET MVC和jQuery。JQuery在我的數據加載到頁面控件之前觸發

我在我的js文件中有這樣的代碼。當用戶點擊一個單選按鈕時,它應該隱藏並顯示某些div。我還想使用觸發器方法在頁面加載時觸發此操作。我的問題似乎是,當事件觸發時,我的模型默認值沒有被加載到控件中,兩個複選框都是錯誤的。我的代碼似乎是正確的,但觸發器發射得太快。有沒有辦法告訴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()。顯示(); }}

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

你shoudl改用就緒事件:

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

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

+0

他是$(函數(){})==快捷方式$(文件)。就緒 – redsquare 2009-08-05 09:22:32

+0

$(FN)和$(文件)。就緒(FN)是相同的... – 2009-08-05 10:24:11

0

我剛纔試了一下,在Firefox和$(函數(){})和$(文件)。就緒(function(){})似乎行爲相同,儘管.ready表單似乎被jquery推薦。也許$(document).load會更好,因爲它可能發生在一些瀏覽器的默認值後被填充? 它在所有瀏覽器上表現如何,還是僅在其中一些上表現相同?

1

你如何將值加載到頁面上?通常它不是一個問題,因爲它們在html輸出中,並且JQuery一直等到使用$(function(){}邏輯加載它時纔會出現問題

由於觸發器位於$(function(){} logic它只是運行click事件馬上一旦網頁被加載。

如果您是通過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會首先設置click事件函數,並且隨着jQuery進一步設置觸發器事件。

也許如果你鏈接他們jQuery將被迫在分配觸發器之前完成點擊段?

相關問題