2012-11-27 43 views
0

我正在開發一個使用Visual Studio 2012和jQuery Mobile的MVC4移動應用程序。我需要記住複選框和單選按鈕的狀態,以便將它們的值存儲在cookie中。當我回到pageinit事件中的頁面時,我設置了這些值,但是這些控件從不可視化更新。使用與移動頁面渲染Firebug,我可以看到值正確更改。我已經打過電話checkboxradio的元素(「刷新」)是這樣的:checkboxradio undefined

$('#btnCompany').prop('checked', true)checkboxradio('refresh'); 

但我總是得到一個錯誤說checkboxradio是不確定和不支持。我知道這個控件是一個單選按鈕。爲了嘗試解決這個問題,我提取了jQuery Mobile中的代碼來刷新我調用的單選按鈕和複選框,並且我可以在Firebug中清楚地看到,不僅輸入檢查正確,而且標籤類已適當更改。然而,視覺上沒有什麼變化,他們看起來像他們原來的樣子我錯過了什麼嗎?爲什麼我會得到一個錯誤說是不支持checkboxradio甚至當我稱這種現象爲pageinit事件:

$("input[type='radio']").checkboxradio("refresh"); 

我已經隱藏,然後顯示包含分區,但失敗嘗試讓人耳目一新。我試過的東西沒有嘗試刷新控件的視覺。任何和所有的幫助將不勝感激!

以下是我打電話來刷新旁路checkboxradio頁面的功能。這裏是我打電話去嘗試和解決問題的功能:

function SetSearchFormState() { 
if ($.cookie('cmdSearchForm') != null) { 

    //$('#searchParamsDiv').hide(); 

    var formData = JSON.parse($.cookie('cmdSearchForm')); 

    $('#SearchText').val(formData.SearchText);   

    // Set all search buttons to not selected.  
    $('.searchBtn').each(function() { 
     $(this).prop('checked', false); 
     RefreshCheckboxRadio(this, false); 
    }); 

    // Set the appropriate search button selected. 
    $('#hidSearch').val(formData.hidSearch); 
    switch (formData.hidSearch) { 
     case 'Opportunity': 
      $('#btnOpportunity').prop('checked', true); 
      RefreshCheckboxRadio($('#btnOpportunity'), true); 
      break; 
     case 'Company': 
      $('#btnCompany').prop('checked', true); 
      RefreshCheckboxRadio($('#btnCompany'), true); 
      break;    
     case 'Contact': 
      $('#btnContact').prop('checked', true); 
      RefreshCheckboxRadio($('#btnContact'), true); 
      break; 
    } 

    // Set all status buttons to not selected. 
    $('.statusBtn').each(function() { 
     $(this).prop('checked', false); 
     RefreshCheckboxRadio(this, false); 
    });   

    // Set the appropriate status button selected. 
    $('#hidStatus').val(formData.hidStatus); 
    switch (formData.hidStatus) { 
     case 'Lead': 
      $('#btnLead').prop('checked', true); 
      RefreshCheckboxRadio($('#btnLead'), true); 
      break; 
     case 'Prospect': 
      $('#btnProspect').prop('checked', true); 
      RefreshCheckboxRadio($('#btnProspect'), true); 
      break; 
     case 'Customer': 
      $('#btnCustomer').prop('checked', true); 
      RefreshCheckboxRadio($('#btnCustomer'), true); 
      break; 
    }   

    // Set the appropriate include button selected. 
    $('#hidAllUsers').val(formData.hidAllUsers); 
    $('#btnAllUsers').prop('checked', false); 
    RefreshCheckboxRadio($('#btnAllUsers'), false); 
    if (formData.hidAllUsers == 'True') { 
     $('#btnAllUsers').prop('checked', true); 
     RefreshCheckboxRadio($('#btnAllUsers'), true); 
    } 

    $('#hidDead').val(formData.hidDead); 
    $('#btnDead').prop('checked', false); 
    RefreshCheckboxRadio($('#btnDead'), false); 
    if (formData.hidDead == 'True') { 
     $('#btnDead').prop('checked', true); 
     RefreshCheckboxRadio($('#btnDead'), true); 
    } 

    //$('#searchParamsDiv').show(); 
    $("input[type='radio']").checkboxradio("refresh"); 
    $("input[type='checkbox']").checkboxradio("refresh"); 
} 
}; 

,這裏是我提煉出來的jQuery Mobile的checkboxradio刷新方法的功能:在運行這些代碼我

function RefreshCheckboxRadio(control, value) { 
if ($(control).is(':radio')) { 
    var parent = $(control).parent('div');   
    var controlId = $(control).attr('id'); 
    var label = $(parent).find("label[for='" + controlId + "']"); 
    var icon = $(label).find(".ui-icon"); 
    //$(parent).hide(); 
    if (value == false) {    
     $(control).removeAttr('checked'); 
     $(label).removeClass('ui-radio-on ui-button-active').addClass('ui-radio-off'); 
     $(icon).removeClass('ui-icon-radio-on').addClass('ui-icon-radio-off'); 
    } else if (value == true) {    
     $(control).attr('checked', 'checked'); 
     $(label).addClass('ui-radio-on ui-button-active').removeClass('ui-radio-off'); 
     $(icon).addClass('ui-icon-radio-on').removeClass('ui-icon-radio-off'); 
    } 
    //$(parent).show(); 
} else if ($(control).is(':checkbox')) { 
    var parent = $(control).parent('div');  
    var controlId = $(control).attr('id'); 
    var label = $(parent).find("label[for='" + controlId + "']"); 
    var icon = $(label).find(".ui-icon"); 
    //$(parent).hide(); 
    if (value == false) { 
     $(control).removeAttr('checked'); 
     $(label).removeClass('ui-checkbox-on ui-button-active').addClass('ui-checkbox-off'); 
     $(icon).removeClass('ui-icon-checkbox-on').addClass('ui-icon-checkbox-off'); 
    } else if (value == true) { 
     $(control).attr('checked', 'checked'); 
     $(label).addClass('ui-checkbox-on ui-button-active').removeClass('ui-checkbox-off'); 
     $(icon).addClass('ui-icon-checkbox-on').removeClass('ui-icon-checkbox-off'); 
    } 
    // $(parent).show(); 
} 
}; 

可以看到這些值是正確的,就像checkboxradio('refresh')被調用時一樣。所以,即使我無法使checkboxradio正常工作,手動執行工作應該可以正常工作,事實上,當我查看Firebug中的更改時,控件仍然不會改變其外觀。

+0

我假設這是一個錯字,但你錯過了一個「。」。 (''btnCompany')。prop('checked',true)checkboxradio('refresh');'。你可以發佈無線電組的標記嗎?如果沒有看到更多的標記/代碼,你可以嘗試在'pageshow'事件中調用refresh方法,因爲'pageinit'只在頁面初始化時被觸發。在調用'refresh'方法之前,另一件事先嚐試調用'checkboxradio()'。 – Jack

+0

是的,你說得對,傑克,那是一個錯字。我已經嘗試過你所建議的一切,但都無濟於事。我試着先調用checkboxradio(),但同樣的錯誤,不支持。我嘗試在pageshow中調用它,同樣的事情。這太讓人沮喪了!我看起來每個地方都很簡單,但我一直試圖想象好幾天,但無法實現。 – Darrell

+0

我更新了我的帖子,以包含我目前調用的兩個函數來刷新頁面,並避開checkboxradio未定義。當我在Firebug中查看它們時,這些功能完美地工作,但控件保持不變。 – Darrell

回答

1

經過多次實驗,我終於拋出了這段代碼,在jQuery Mobile中禁用了Ajax,然後手動處理了所有的Ajax。我可以寫一本關於使用MVC4開發jQuery Mobile應用程序的知識的書,並且可能會幫助許多人,但是由於我沒有時間,也沒有爲此付錢,對不起。我只能希望,有一天有人會記錄如何以正確的方式做事,以便人們可以轉向一個單一的來源,而不必花費數小時在這裏和那裏搜索零碎的東西。