2016-06-14 8 views
0

in letzter Zeit habe ich einige seltsame Verhalten in jQuery erlebt. Es ist mein HTML-Code:jQuery returns prevObject anstelle von Optionswert

<select class="chosen-select"> 
    <option value="35" data-lat="50.054371" data-lng="14.486067">Praha 10, Záběhlická 84 (Hobby car)</option> 
    <option value="36" data-lat="49.186535" data-lng="16.604361">Brno, Nové sady 30 (ecmarket.cz)</option> 
</select> 

ist meine jQuery-Code:

$('.chosen-select').on('change', function(evt, params) { 
    var currLat; 
    var currLng; 

    currLat = $('.chosen-select option:selected').attr('data-lat'); 
    currLng = $('.chosen-select option:selected').attr('data-lng'); 
    console.log($('.chosen-select option:selected').attr('data-lat')); 
    console.log($('.chosen-select option:selected').attr('data-lng')); 
    console.log($(currLat)); 
}); 

und es gibt Protokolle von Konsole:

50.724499 
15.169286 
[prevObject: n.fn.init[1], context: document, selector: "50.724499"] 

Als ich mich umsah, fand ich heraus, dass Mein Selektor ist falsch und nicht im DOM. Aber

1) Warum scheinen die ersten zwei Protokolle in Ordnung zu sein?

  • Ist das nicht ein bisschen komisch?

2) wie das zu beheben?

  • Versucht, den Code in $ (Dokument) .ready (function() {}) aufzurufen;

Danke für jede Hilfe oder Informationen Jungs.

+1

mir alles gut aussieht. [Sie sehen 'prevObject', wenn Sie keine Übereinstimmung gefunden haben] (http://stackoverflow.com/questions/19697495/what-is-prevobject-and-why-is-my-selector-returning-that) . jQuery gibt Ihnen immer ein Objekt, auch wenn nichts passt. Es wird nur eine leere Sammlung mit einem jQuery-Wrapper sein. –

+0

Ich bin mir ziemlich sicher, dass Sie 'console.log (currLat)' gemeint haben, nicht 'console.log ($ (currLat))'. Warum würdest du die Zeichenfolge '" 50.724499 "' an jQuery übergeben? – Bergi

+0

Ein jQuery-Selektor gibt immer ein Objekt zurück, auch wenn der für den Selektor verwendete Wert keine Elemente zurückgegeben hat. Dies ist, was Sie in der Konsole sehen, da es kein Element für '$ ('50.054371')' –

Antwort

0

In diesem Fall habe ich Selektor statt Variable verwendet.

Korrekter Code sollte sein:

$('.chosen-select').on('change', function(evt, params) { 
    var currLat; 
    var currLng; 

    currLat = $('.chosen-select option:selected').attr('data-lat'); 
    currLng = $('.chosen-select option:selected').attr('data-lng'); 
    console.log($('.chosen-select option:selected').attr('data-lat')); 
    console.log($('.chosen-select option:selected').attr('data-lng')); 
    console.log(currLat); 
});