Jump to content
vikcch

style is undefined

Recommended Posts

vikcch

boas,

Tenho esta function que é chamada quando crio um novo elemento (span), e tem como parametro esse novo elemento que criei (span):

            function selectColor(e) {
                myDataToSave.colorID = $(e).data("id");
                //$("span#selected-color").css("background-color", e.style.backgroundColor); // TypeError: e.style is undefined
                $("span#selected-color").css("background-color", $(e).css('backgroundColor'));
            }

quando tento mudar o background-color de outra span para o background-color da span que estou a passar pelo parametro (e), só consigo mudar através de jquery, com js não consigo, dá o erro que mostra em cima: TypeError: e.style in undefined

Qual o motivo?

Estou a criar a span assim:
 

                    $('<span/>', {
                        id: objLabels.IdPreFix + objResult.id, // ex: 'category_' + '1'
                        class: objLabels.htmlClass,
                        title: objResult.name,
                        text: objResult.name
                    }).appendTo(objLabels.append);

                    var spanID = 'span#' + objLabels.IdPreFix + objResult.id;
                    $(spanID).data("id", objResult.id);


                    if (objResult.hasOwnProperty('hex')) {
                        $(spanID).css("background-color", objResult.hex);
                        $(spanID).html(" ");
                    }

                    $(spanID).click(function () {
                        window[objLabels.functionName]($(spanID));
                    });

                    // chamar function com o nome em string
                    window[objLabels.functionName]($(spanID));

Outra coisa, é como posso inserir logo valores no atributo data quando crio a span?
 

$(spanID).data("id", objResult.id); // não ter esta linha

$('<span/>', {
    // ...                 
    data: 'id' +  objResult.id // inserir logo o valor aqui
}).appendTo(objLabels.append);

Obrigado desde já!

Share this post


Link to post
Share on other sites
tiago.f

Olá vikcch,

$(e) é diferente de apenas ‘e’

usa os inspector de JavaScript no browser para veres a diferença. 

Provavelmente se fizeres

e[0].style 

ja deve dar... mas só testando mesmo. 

Share this post


Link to post
Share on other sites
vikcch

Obrigado por postares!!

Assim já deu... mas a agora quando clico noutra span criada antes com  onclick="selectColor(this);"

dá o erro: TypeError: e[0] is undefined

Podes explicar melhor o que está a acontecer?

 

E a outra duvida sabes?

 

Share this post


Link to post
Share on other sites
tiago.f
#> document.getElementById("elLogo");
<a id="elLogo" href="https://www.portugal-a-programar.pt/" accesskey="1">

#> $("#elLogo")
Object { 0: a#elLogo, length: 1, context: HTMLDocument https://www.portugal-a-programar.pt/, selector: "#elLogo" }

#> $("#elLogo")[0]
<a id="elLogo" href="https://www.portugal-a-programar.pt/" accesskey="1">

Repara no exemplo acima.

Quando usas $(..) para "obter" um elemento, de facto obtens um array de elementos (que pode ter apenas um elemento => o [0])

Agora tudo depende do que é passado no parametro da tua função (selectColor).

Chamas

selectColor(document.getElementById("selected-color"))

ou

selectColor($("span#selected-color"))

?

dependendo do caso a tua variavel 'e' será de um tipo diferente.

No caso do "selectColor(this)", só mesmo percebendo onde está esta chamada...e o que é o "this" ... ?

 

EDIT:

se queres aceder ao objecto DOM, usas $(xpto)[0]

se usares apenas $(xpto) estás a aceder ao objecto jQuery, e aí deves usar funções jQuery, como por exemplo $(xpto).css(...)

Edited by tiago.f
  • Vote 1

Share this post


Link to post
Share on other sites
vikcch

o this refere-se ao próprio elemento (span)... para dentro da função ter acesso a parametro.style.backgroundColor;

crio as outras spans com php e altero os valores nas chavetas

$element = '<span id="cor_{0}" class="color-picker" style="background-color:{1};" title="{2}" onclick="selectColor(this);" data-id="{0}"> </span>';

 

Ok, obrigado, acho que já percebi...

se quiser usar o parametro.style.backgroundColor tenho que passar como parametro o primeiro elemento do array na outra função onde crio a span com jquery

 

Share this post


Link to post
Share on other sites
tiago.f

Exactamente!

de qq modo, já que estás a usar jquery, porque não usares pra tudo....?

Share this post


Link to post
Share on other sites
vikcch

vou usar e tenho usado... mas só comecei agora.... nem li a documentação nem nada... foi mais só procurar o que precisava e pronto... depois é normal ter estas duvidas lol

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.