Jump to content

Recommended Posts

Posted (edited)

Bueno yo se que aqui no es un foro de coding pero bueno estoy con el clavo y quiero saber que f-uck es.

ojo

HTML

<ul>

<li>uno</li>

<li>dos</li>

<li>tres</li>

<li>cuatro</li>

<li>cinco</li>

</ul>

CSS

ul{

display:block;

overflow:hidden;

padding:0px;

margin:100px 200px;

}

ul li{

list-style-type:none;

float:left;

background-color:#666;

margin-right:10px;

position:relative;

top:0px;

left:0px;

padding:5px 10px;

}

JQUERY

jQuery.fn.extend({

AnimateMenu:function(){

var total_widths = 0;

var speed = 1000;

$(this).children().each(function(){

total_widths += $(this).outerWidth();

total_widths += parseInt($(this).css("margin-left"),10);

total_widths += parseInt($(this).css("margin-right"),10);

$(this).css({left:"-"+(total_widths)+"px"});

});

$(this).children().each(function(){

$(this).animate({left:"0px"},speed);

});

}

});

jQuery(document).ready(function($){

$("ul").AnimateMenu();

});

El problema es con IE7 u 8, aparece un error en el codigo de jquery, he googleado esto pero la solucion que sugieren en un par de sitios no me sirven...

La linea en mi code que genera el error es

$(this).css({left:"-"+(total_widths)+"px"});

Ahora bien si alguien conoce un metodo que no sea css para setear los left pues que lo posteen

;)

Edited by pyz
Posted (edited)

Esta linea: $(this).css({left:"-"+(total_widths)+"px"});

da error pq el valor de "total_widths" es un "NaN" y eso en IE termina concatenandose mal.

Creo q es un error de Logica mas de compatibilidad en browsers.

Edited by x[G]SGT
Posted

En realidad mi conocimiento de jquery y de javascript en general es muuuy limitado, pero viendo el código veo que hacer un parseInt de un par de atributos, y uno de ellos no está definido en su css (margin-left). En los lenguajes con los que acostumbro hacer cosas, eso posiblemente tire un NPE o alguna excepción de cast o algo así. Podría ser por eso? Fuerte batazo, pero bueno.

Posted

Gracias a ambos, aqui la solucion!

jQuery.fn.extend({

AnimateMenu:function(){

var total_widths = 0;

var speed = 1000;

$(this).children().each(function(){

total_widths += $(this).outerWidth();

if(!isNaN(parseInt($(this).css("margin-left"))))

total_widths += parseInt($(this).css("margin-left"),10);

if(!isNaN(parseInt($(this).css("margin-right"))))

total_widths += parseInt($(this).css("margin-right"),10);

$(this).css({left:"-"+(total_widths)+"px"});

});

$(this).children().each(function(){

$(this).animate({left:"0px"},speed);

});

}

});

El problema estaba en que los atributos css de margin-left y margin right no estaban definidos, en firefox esto devuelve 0 pero en IE devuelve auto :S

Para evitar esto puse ese par de ifs para evitar que devuelva nah el fvck IE

Era tan simple que no lo pense, y yo ya estaba empezando a poner el traking para un ticket :P

SOLVED

Posted (edited)

en realidad es como vez las cosas en javascript hacer esto

element.style.margin-left = "10px"; es ilegal que es lo que tu hacias, lo correcto es

element.style.marginLeft = "10px"; el mismo error q te corregi con el z-index a zIndenx y aunque Jquery como tal hace algunas conversiones magicas pues.. nunca me fio

lo puedes probar en este mismo post... en firebug

document.getElementById("rep_post_279196").style.margin-left;

retorna: ReferenceError: left is not defined

ahora

document.getElementById("rep_post_279196").style.marginLeft;

retorna: ""

porque dicho elemento no tiene margen, parseInt(""), o parseInt(undefined); retorna NaN en FF e IE

Edited by H
Posted (edited)
SGT' date='23 November 2009 - 02:59 PM' timestamp='1259009992' post='279218']

Pyz, dale al boton de + a mi post!!!

Pura vida!!

Mae ahi le di a este ultimo post que pusiste y no al de la respuesta :P pero para el caso es lo mismo!

yo quiero punticos entonces hahahaha

A H no le doy porque es Gay!

Edited by pyz
Posted (edited)

solo queria agregar que para código, el editor de ipb permite dar estilo, así por ejemplo

esto:

jQuery.fn.extend({

AnimateMenu:function(){

var total_widths = 0;

var speed = 1000;

$(this).children().each(function(){

total_widths += $(this).outerWidth();

if(!isNaN(parseInt($(this).css("margin-left"))))

total_widths += parseInt($(this).css("margin-left"),10);

if(!isNaN(parseInt($(this).css("margin-right"))))

total_widths += parseInt($(this).css("margin-right"),10);

$(this).css({left:"-"+(total_widths)+"px"});

});

$(this).children().each(function(){

$(this).animate({left:"0px"},speed);

});

}

});

podría mostrarse así:

jQuery.fn.extend({
 AnimateMenu:function(){
	var total_widths = 0;
	var speed = 1000;
	$(this).children().each(function(){
 total_widths += $(this).outerWidth();
 	if(!isNaN(parseInt($(this).css("margin-left"))))
 	total_widths += parseInt($(this).css("margin-left"),10); 
 	if(!isNaN(parseInt($(this).css("margin-right"))))
 	total_widths += parseInt($(this).css("margin-right"),10);
 $(this).css({left:"-"+(total_widths)+"px"});
	});
	$(this).children().each(function(){
 	$(this).animate({left:"0px"},speed); 
 	});
 } 
});

manteniendo de esta forma la estructura(el código que puse no tenía estructura, solo es para mostrar que se mantienen los espacios) y dando un estilo más legible

la etiqueta es 2q3xkz6.png , tambien hay otras opciones para SQL, HTML, XML, etc

Desde el menú se pueden seleccionar desde la opción marcada en rojo:

27wu938.png

Edited by DrKrz
Guest
This topic is now closed to further replies.
×
×
  • Create New...