2012-11-06 4 views
5

Ich benutze ddSlick Plugin für jQuery und die Methode onSelected sollte nur ausgeführt werden, wenn ich eine Option aus dem erstellten Dropdown ausgewählt habe.ddslick Methode onSelected läuft sofort

Das einzige Problem ist, dass der folgende Code ich onSelected ausführen soll, sobald die Seite geladen wird.

Kann mir jemand in die richtige Richtung zeigen?

$('#flag').ddslick({ 
    imagePosition:"left", 
    background:"none", 
    width:"66px", 
    onSelected: function(data){ 
     var chosenCountry = data.selectedData.value; 
     chosenCountry = chosenCountry.toLowerCase(); 
     if(data.selectedIndex > 0) { 
      if(new_url[1] in oc(['de', 'es','fr','it'])) { 
       console.log("translated pages"); 
      } 
     } else { 
      console.log("English site"); 
     } 
    } 
}); 

jsFiddle

Dank

+0

der obige Code in einem 'document.ready' Handler ist? – Archer

+0

Ja ist es in einem document.ready Handler und feuert immer noch. Überprüfen Sie das JsFiddle. Es sollte die Warnung nur auslösen, wenn eine Auswahlbox ausgewählt wurde – ngplayground

+0

Ich habe damit gespielt und kann nichts anderes als das, was du beschreibst, tun. Ich werde mich nach Möglichkeit mit dem Entwickler in Verbindung setzen und sie fragen (es sei denn, Sie möchten selbst in den Code eintauchen). Ich würde ein "First-Time" -Typ-Flag vorschlagen, aber das würde es brechen, wenn es nicht in allen Browsern auftritt, oder wenn Sie (oder ein anderer Entwickler) es jemals auf eine andere Version aktualisieren, die das nicht tut. – Archer

Antwort

12

Ich habe eine Lösung nach Stunden, herauszufinden, was das Problem erfunden.

Ich direkt etwas an dem Code ändern.

Hinweis: Sie müssen die unminified version verwenden, um diese Anweisungen zu befolgen.


on line 220

Fund:

function selectIndex(obj, index) { 

Änderung es zu:

function selectIndex(obj, index, a) { 

Linie 270

Fund:

if (typeof settings.onSelected == 'function') { 
    settings.onSelected.call(this, pluginData); 
} 

Änderung es zu:

if (typeof settings.onSelected == 'function') { 
    if (a !== true) settings.onSelected.call(this, pluginData); 
} 

Und schließlich auf der Leitung 146

finden

selectIndex(obj, index) 

es dann zu

selectIndex(obj, index, true) 

Hoffnung ändern, das hilft!

+0

selectIndex (obj, index, true) Diese Anweisung funktioniert nicht, es gibt einen Fehler beim Argument "true". – Naeem

+0

Haben Sie versucht, die Linie 220 zu ändern? Wenn es immer noch nicht funktioniert, können Sie die neue Version von ddSlick verwenden, alle Fehler sind behoben und einige neue coole Funktionen hinzugefügt. Überprüfen Sie http://ddslickremablized.remabledesigns.com/ –

+0

Auch ich bin mir nicht sicher, welche Version Sie verwenden. Es ist am besten für Sie, die neueste Version zu verwenden. –

4

Sie können immer überprüfen, ddSlick Remablized es behebt dieses Problem und fügt eine Reihe von anderen coolen Funktionen wie Tastatur, Klasse und deaktivieren/aktivieren Unterstützung!

oder Sie wollen, dass diese, um sich selbst die Funktion

function selectIndex(obj, index) {

als am unteren Ende der Funktion gehen zu tun, werden Sie

//Callback function on selection 
if (typeof settings.onSelected == 'function') { 
     settings.onSelected.call(this, pluginData); 
} 
finden

entfernen Sie Schnitt und fügen Sie diesen Abschnitt über die folgenden wie nt

//If set to display to full html, add html

und als die ändern, wenn Anweisung

if (typeof settings.onSelected == 'function' && ddSelected.text().length > 0) {

ddSlick Remablized wurde sogar von Prashant Chaudhary getwittert über sich selbst! Überprüfen Sie es hier https://twitter.com/chaudharyp/status/268045906442584064

5

Es ist schmutzig und kludsey, aber es funktionierte für eine schnelle Lösung (war mit verkleinerte Version und wollte nicht für ein kleines Stück meines Codes wechseln). Ich habe gerade ein globales Bool definiert und beim ersten Laden auf true gesetzt.

var _ddlLoaded = false; 
$(function() { 
    $('#ddl').ddslick({ 
      data: ddlData, 
      onSelected: function (data) { 
       if(_ddlLoaded === false) { 
        _ddlLoaded = true; 
       } 
       else { 
        console.log(data.selectedData.value); 
       } 
    }); 
}); 
0

Sie können auch versuchen, diese jsFiddle

function oc(a){ 
    var o = {}; 
    for(var i=0;i<a.length;i++){ 
     o[a[i]]=''; 
    } 
    return o; 
    } 
    var temp = 0; 
    $('#flag').ddslick({ 
    imagePosition:"left", 
    background:"none", 
    width:"66px", 
    onSelected: function(data){ 
     var chosenCountry = data.selectedData.value; 
     chosenCountry = chosenCountry.toLowerCase(); 
     if(data.selectedIndex >= 0 && temp==1) { 
      if(chosenCountry in oc(['uk','de', 'es','fr','it'])) { 
      alert("translated pages"); 
      } 
     } 
     temp = 1; 
    } 
    });