Ajutor Javascript-conversie culori

Am un tabel cu x coloane si y randuri,tabel ce are celule ce au clasa(class) .table_cell.
Cand dau click pe o celula clasa este convertita intr-o variabila(cell_control) cu ajutorul jQuery,dar este luata ca this pt ca se refere doar la celula respective si nu la tot tabelul.

Cand se face click pe o celula se deschide un div si in acel div se afla input-uri cu care poti modifica proprietatile celulei respective(ex:font-family,color,background-color).Cand dai click pe o alta celula goala proprietatile se reseteaza,dar daca dau click pe celula anterioara proprietatile sa nu fi resetate(sa retina proprietati pt fiecare celula in parte).Am facut asta pt font-family,value(continut celula),dar cu culorile nu merge.

Culorile sunt selectate dintr-un input color(care returneaza in HEX,iar culoarea celului returnata de jquery este in RGB)

un exemplu,pt tex-ul din celulat:

if( cell_control.html() == " " ) {
			$("#cell_value").val("");
		}
		else {
			$("#cell_value").val(cell_control.html());
		}

cell_control este celula, #cell_value este input text-ul unde se introduce valoarea celulei

dar la culoare nu merge

if( cell_control.css("color") == "rgb(0, 0, 0)" )  {
			$("#cell_textColor").val("#000000");
		}
		else {
			$("#cell_textColor").val(rgbToHex(String(cell_control.css("color"))));
		}

culoarea celului este setata cu css la rgb(0, 0, 0), #cell_textColor este input color, rgbToHex este o functie luata de pe stackoverflow pt a converti RGB in HEX(asa intelege input color-ul).

Problema este daca merge pe else(daca textul din celula are o alta culoare decat cea default-negru in cazul de fata).

function rgbToHex(r, g, b) {
    return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}

Am citit de două ori și… nu sunt sigur că am înțeles unde e problema.

Ai putea pune un titlu ceva mai sugestiv și să reformulezi întrebarea?

Pe scurt,am nevoie sa setez o valoare( val() ) pentru in input type=color care necesita culoare HEX(#000000 de ex).Culoare pe care o setez eu este in format/cod(daca ii pot spune asa ) RGB( rgb(0, 0, 0) de ex).Trebuie sa transform RGB in HEX pentru ca asa accepta input-ul.Doar ca nu merge conversia chiar daca folosesc acea functie.

functia pare sa faca conversia ok. problema e in alta parte. un link catre un demo page ar fi util.

Presupun că problema e aici:

$("#cell_textColor").val(rgbToHex(String(cell_control.css("color"))));

Mai exact: cell_control.css("color").

Jquery nu returnează doar culorile, îți returnează rgb(1,2,3) și tu trimiți spre rgbToHex un parametru (funcția așteaptă trei parametri).

Încearcă varianta asta:

function rgbToHex(r, g, b) {
  if(!g && !b) {
    var colors = String(r).replace(/(rgba?\()|(\))/ig, '').split(',');
    r = parseInt(colors[0], 10);
    g = parseInt(colors[1], 10);
    b = parseInt(colors[2], 10);
  }
    return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
1 Like

A mers! Mersi mult!

1 Like