2011-06-29 22 views
8

Tengo un pequeño problema de JavaScript. El código está funcionando en el navegador Opera y Firefox pero no en Internet Explorer 8. ¿Alguien sabe por qué?JavaScript - argumento no válido IE8

function createbtn(object, inner) { 
    var hover = document.createElement("div"); 
    hover.setAttribute("class", "myarea"); 
    if (inner) { 
     hover.style.width = object.width - 16 + "px"; 
     hover.style.height = object.height - 16 + "px"; 
     hover.style.top = getposy(object) + "px"; 
     hover.style.left = getposx(object) + "px"; 
    } else { 
     hover.style.width = object.width + "px"; 
     hover.style.height = object.height + "px"; 
     hover.style.top = getposy(object) - 8 + "px"; 
     hover.style.left = getposx(object) - 8 + "px"; 
    } 
} 

Acabo de aprender Javascript. Cualquier comentario bienvenido. Simon

+0

¿Qué es 'getposx' y' getposy'? – Neal

+0

¿Puedes poner tu código completo en una demostración de http://jsfiddle.net? – Neal

+0

Si usa las herramientas de desarrollador (F12), puede verificar en qué modo de renderización está IE 8. ¿Puede publicar lo que es? Sospecho que está en el modo Quirks. –

Respuesta

2

Supongo que tiene que ver con hover.setAttribute("class", "myarea");. Si IE 8 se está ejecutando en IE 7 o más bajo, esto no funcionará. Luego debe usar hover.className = 'myarea' (compatible con todos los navegadores).

El parámetro sAttrName requiere el nombre del atributo de contenido deseado y no el atributo Modelo de objetos de documento (DOM). Por ejemplo, en el modo IE8, este método ya no requiere que sAttrName sea "className" al establecer, obtener o eliminar un atributo CLASS. Las versiones anteriores de Internet Explorer e Internet Explorer 8 en modo de compatibilidad aún requieren que sAttrName especifique el nombre de propiedad DOM correspondiente.

http://msdn.microsoft.com/en-us/library/ms536739%28v=vs.85%29.aspx

Compruebe el modo de IE se está ejecutando.

+0

Ack, pásamelo. –

9

Si object.width es menor que 16

hover.style.width = object.width - 16 + "px"; 

entonces esto va a producir una cadena con un signo negativo en la parte delantera, que es ilegal desde anchuras tienen que ser no negativo.

Puedes solucionar este problema diciendo

hover.style.width = Math.max(object.width - 16, 0) + "px"; 

y de manera similar para la altura.

Muchos navegadores ignoran el contenido no válido, pero el IE en ciertos modos es más estricto, por lo que es probable que solo obtenga una falla silenciosa en los demás.

+0

Estoy usando el modo de navegador IE8 ** estándar **. Resolví el problema de ancho/altura negativo pero la configuración de posición no funciona. El código está aquí: http://jsfiddle.net/AT825/ ¿Qué tiene de malo? Gracias a todos los buenos comentarios hasta ahora. – Simon

+0

¿Estás seguro de que 'getposy' y' getposx' no devuelven NaN? –

+0

No estoy seguro. Para 'hover.style.top = getposy (object) +" px '"; el depurador IE8 solo dice un _Invalid Argument_ – Simon

Cuestiones relacionadas