• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

jqm 1.4.3 Uncaught Error: cannot call methods on selectmenu prior to initialization;

S

s4ty

Guest
Hey,

ich habe das Problem das ich die Fehlermeldung:
Uncaught Error: cannot call methods on selectmenu prior to initialization; attempted to call method 'refresh'
erhalte obwohl ich das menu mit .selectmenu() initialisiere.

Konkret ändere im change-Event die Anzahl der Optionen, diese variieren zwischen 11 und 15.
Das Problem dabei ist das ich die view nicht aktualisiert bekomme.

Das select wird nicht direkt mit .selectmenu() initialisiert, sondern der gesamte Container mit .enhanceWithin(), welches im Callback eines ajax request aufgerufen wird.
Die selects werden dadurch auch richtig von jqm geparsed, allerdings kann ich wie gesagt kein .selectmenu( "refresh" ) aufrufen ohne besagte Error-Message zu erhalten.
Ich hab darauf probiert den Container nicht mit .enhanceWithin(); zu erstellen, sondern mit $(#container select').selectmenu(); -> gleiche Resultat. jqm styled alles richtig ,aber selectmenu("refresh") ist nicht möglich.

Code:
$('.select-passive-level option:gt(10)', $mc).remove();
if (!passive.isOldPassive) {
  for (var i = 12; i < 16; i++) {
    $('.select-passiv-level', $mc).append($('<option />', {value: i, html: "Level: " + i}));
  }
}
if ($('.passive-text div.text', $table).text() !== passive.name) {
  $('.select-passive-level', $mc)[0].selectedIndex = 0;
  $('.select-passive-level', $mc).selectmenu("refresh");
}

HTML:
        <fieldset data-role="controlgroup" class="select-passiv-level-container">
            <select name="select-passive-level" class="select-passive-level">
                <option value="1">Level: 1</option>
                <option value="2">Level: 2</option>
                <option value="3">Level: 3</option>
                <option value="4">Level: 4</option>
                <option value="5">Level: 5</option>
                <option value="6">Level: 6</option>
                <option value="7">Level: 7</option>
                <option value="8">Level: 8</option>
                <option value="9">Level: 9</option>
                <option value="10">Level: 10</option>
                <option value="11">Level: 11</option>
            </select>
        </fieldset>


Auch $('.select-passive-level', $mc).selectmenu().selectmenu("refresh"); geht nicht... :S


Was mache ich falsch? Wie kann ich das select auffordern sich zu aktualisieren?

- - - Aktualisiert - - -

Hab den Fehler gefunden.

Und zwar wird durch den jqm parser vor dem <select> ein span erzeugt welches den Namen des <select> als Klasse erbt....
Ich habe also quasi probiert diesen span mein .selectmenu("refresh") aufzudrücken, was natürlich fehlschlägt. :/


Hab also meinen Selektor angepasst und es geht

Code:
$('select.select-passive-level', $mc).selectmenu("refresh", true);

Code:
    <fieldset data-role="controlgroup" class="select-passiv-level-container">
      <span class="select-passive-level">Level: 1</span> <!-- durch parser erzeugt -->
      <select name="select-passive-level" class="select-passive-level">
        <option value="1">Level: 1</option>
        <option value="2">Level: 2</option>
        <option value="3">Level: 3</option>
        <option value="4">Level: 4</option>
        <option value="5">Level: 5</option>
        <option value="6">Level: 6</option>
        <option value="7">Level: 7</option>
        <option value="8">Level: 8</option>
        <option value="9">Level: 9</option>
        <option value="10">Level: 10</option>
        <option value="11">Level: 11</option>
      </select>
    </fieldset>

Das ist der Grund warum man seine Selektoren möglichst genau wählen sollte. ;)
 
Zuletzt bearbeitet:
Zurück
Oben