jQuery Mobile: Uncaught не може да извиква методи на checkboxradio преди инициализация; се опита да извика метод "refresh"

Скубя си косата, занимавайки се с този проблем. Това е кодът, който използвах и причиних споменатия проблем.

$(document).ready(function () {
    $("#at-site-btn").bind("tap", function () {
        $.mobile.changePage("view/dialog/at-site.php", { transition:"slidedown", role:"dialog" });
    });
    $('#at-site-page').live('pagecreate', function(){
        var $checked_emp    = $("input[type=checkbox]:checked");
        var $this           = $(this);
        var $msg            = $this.find("#at-site-msg");
        $checked_emp.appendTo($msg);
        $checked_emp.trigger('create');
        $msg.trigger('create');
        $(document).trigger('create');
        $this.trigger('create');
        $("html").trigger('create');

    });
});

Обяснение:

Горният код е във файл с име hod.php. Файлът съдържа няколко квадратчета за отметка. Тези квадратчета за отметка и да бъдат маркирани едновременно и когато натиснах бутона #at-site-btn, at-site.php се появява (като диалогов прозорец) и показва всички отметнати квадратчета.

Тук се появи проблемът. Когато натиснах бутона за връщане назад в диалоговия прозорец, за да се върна на предишната страница и се опитах да махна отметките от тези квадратчета, грешката изскача, както е споменато в заглавието. В моя код няма извиквания на „метод за опресняване“, така че не виждам начин да поправя това.

  1. Може ли някой да предложи начин за решаване на този проблем?
  2. Използвам ли го правилно? (Много съм нов в jQuery Mobile. Ако има някои концепции зад използването на JQM, моля, обяснете ми ги [Опитах се да прочета JQM Docs, изглежда ми толкова неясно]).

Поздрави и много благодаря за отговорите.


person Mysteltainn    schedule 02.10.2012    source източник
comment
вероятно това решение също може да ви помогне...   -  person Taifun    schedule 09.11.2012
comment
@Taifun - благодаря ти, че ме насочи към решение   -  person Aaron D    schedule 03.03.2013


Отговори (2)


Каква версия на jQueryMobile използвате? Може да се наложи да използвате pageinit вместо pagecreate. Тази част от документацията на jQueryMobile говори за възможностите за избор.

За повторно рисуване или създаване, решението, което @Taifun посочи, което изглежда така:

$("input[type='radio']").checkboxradio();
$("input[type='radio']").checkboxradio("refresh");
работи добре за мен, но не рисува контролите 100% правилно. Радио бутоните не получиха ръбове, боядисани със заоблени ъгли.

Преди да видя кода ви, прочетох тук, че можете да извикате .trigger('create') на контейнерния обект и това проработи за мен. Вие правите това, но вътре в pagecreate вместо в pageinit.

person Aaron D    schedule 02.03.2013

Всъщност използвах квадратче за отметка на flipswitch:

<div class="some-checkbox-area">
    <input type="checkbox" data-role="flipswitch" name="flip-checkbox-lesson-complete"
           data-on-text="Complete" data-off-text="Incomplete" data-wrapper-class="custom-size-flipswitch">
</div>

така че трябваше да направя това:

$("div.ui-page-active div.some-checkbox-area div.ui-flipswitch input[type=checkbox]").attr("checked", true).flipswitch( "refresh" ) 

Вижте пълния ми отговор тук.

person SharpC    schedule 29.05.2021