2012-10-03 14 views
13

Si tratta di una ri-do di una domanda che è stato chiuso erroneamente: jQuery 1.8 outer Height/Width not workingjQuery 1.8.2 + non corrente jQuery UI = outerWidth e outerHeight rotto

Sto colpendo lo stesso problema. outerWidth e outerHeight e ora restituisce l'oggetto jQuery anziché i numeri.

Stiamo usando jQuery UI 1.8.17, rilasciato il 10 gennaio 2012. Non è una versione super vecchia, quindi ho la sensazione che le altre persone vedranno questo. Siamo bloccati in questa versione a causa di alcuni terribili plugin ui jQuery, quindi l'aggiornamento non è attualmente un'opzione.

Se trovo una soluzione, risponderò a questa domanda.

Ecco un violino che dimostra il problema http://jsfiddle.net/delvarworld/yxDHu/ (versione jQuery UI aggiunto in "gestione delle risorse")

Aggiornamento: È perché questa linea in jQuery UI:

return orig[ "outer" + name ].call(this, size); 

viene erroneamente innescare questa condizione in jQuery 1.8.2:

var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), 

perché anche se size è indefinito, l'assegno è per arguments.length. chainable dovrebbe essere falso qui. È possibile passare in modo indefinito e renderà gli argomenti ancora un oggetto con lunghezza 1. Qualcuno deve leggere il proprio JS;)

+1

Bug aperto: http://bugs.jquery.com/ticket/12647 –

+0

+1 per riaprire la questione. secondo http://api.jquery.com/outerHeight/ 'includeMargin' è un parametro facoltativo, ma se non è impostato su true/false lo still (jquery 1.8.3) restituisce l'elemento. – roberkules

risposta

8

Una semplice soluzione sembra essere solo di passaggio in false

$(document.body).outerWidth(false); 

Oppure, vero se si vuole i margini, ma se passassi in vero sembra che non avresti encou ha risolto questo bug

+0

Questa sembra una soluzione approssimativa.Dovrei modificare ogni chiamata outerWidth/outerHeight in ogni singolo plugin jQueryUI per passare false quando true non è già presente. Il vero problema è che i metodi sovrascritti di jQueryUI non sono progettati abbastanza bene (come dalla versione dell'OP). Pertanto, la soluzione corretta dovrebbe modificare l'estensione di jQueryUI con una logica più intelligente - risolvere il problema anziché i suoi sintomi. – Tom

2

Suggerisco di aggiornare sia i pacchetti jQuery che i pacchetti dell'interfaccia utente jQuery. 1.8.1 e 1.8.2 in particolare risolvono i problemi relativi a outerWidth/outerHeight e, naturalmente, l'interfaccia utente di jQuery deve essere mantenuta sincronizzata.

Vedi le changelog sugli annunci per riferimento:

http://blog.jquery.com/

http://blog.jqueryui.com/

+0

non può aggiornare come da domanda. come jquery dovrebbe essere retrocompatibile, questo è un problema –

+0

Se leggi il blog - jquery 1.8 ha avuto problemi con outerWidth/outerHeight. http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/ Prova ad aggiornare jquery a 1.8.2 e vedi se questo aiuta. – Joshua

+0

stiamo usando 1.8.2 :(domanda aggiornata –

6

Sembra che sia un problema jquery. Sembra essere risolto in 1.8.22.

With jquery UI 1.8.21:http://jsfiddle.net/yVq5H/13/

With jquery UI 1.8.22 (fixed):http://jsfiddle.net/yVq5H/14/

+1

Ho avuto il problema con jQuery 1.8.2 e jQuery UI 1.8.17 - che ha causato il fatto che il cursore Orbit di Fondazione non si spostasse. Ci ho messo un po 'a capire che outerWidth() non funzionava: un aggiornamento alla più recente UI jQuery 1.10.0 risolveva questo problema. – rkallensee

+0

concordato. Tramite http://bugs.jquery.com/ticket/12293: "Si prega di aggiornare jqueryUI a 1.8.22, in quanto quello è compatibile con jQuery 1.8" –

+0

concordo con rkallensee - questo è stato un enorme dolore per diagnosticare . – Tom