Jump to content

Recommended Posts

Posted

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á!

Posted

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?

Posted (edited)
#> 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
Posted

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

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.