Condição melhorada

Pessoal,

tenho o código abaixo que pego duas variáveis, mas caso elas sejam nulas, eu atribuo um valor, mas achei meio “porco” o jeito que validei.

				var h = $(this).attr("height");
			var w = $(this).attr("width");
			
			if (h == null){
				h = 500;
			}
			if (w == null){
				w = 600;
			}

var h, w;

{ $(this).attr(“height”) !== null ? h = $(this).attr(“height”) : h = 500 }
{ $(this).attr(“width”) !== null ? w = $(this).attr(“width”) : w = 600 }

Não testei mas acredito que de certo

Um conselho, tente sempre usar === sempre que possível, ao invés de ==, pois assim vc valida o tipo também e não apenas o conteúdo

Vlw pela resposta, mas não funcionou, deve ser detalhe, vou analisar melhor.
É que neste caso não preciso validar o tipo, mas obrigado pela dica.

1 curtida

acho que a soluçao idiomática em javascript seria:

var h = $(this).attr("height") || 500;
var w = $(this).attr("width") || 600;

Essa também, não funcionou, mas obrigado pela ajuda

Funcionou, tirei a validação do tipo e foi… neste caso não preciso validar o tipo.

Vc (ou alguém) sabe como adicionar mais uma condição? Pq se eu declaro o height ou width ’ =" " ’ (igual a nada dentro) ele não cai na condição default com valor setado.

Qual objetivo do seu problema? Se o que você fez atende, o código já está claro, outras formas podem dificultar a leitura. Se não atende, fale o problema.

É apenas melhorar a parte visual, não queria deixar dois “if’s”, essa condição ficou melhor… agora só queria adicionar uma validação de ="" estou testando agora se isso abaixo funciona:

O que acontece com os ifs ali é bem claro, cada um valida uma coisa.

1 curtida

Não sei pq essa solução não adiantou…

Fica zerada, é que são atributos dinâmicos e as vezes não terá valores e ficará apenas height ou width sem nem o height="".

Para estes casos eu não sei como resolver.

{ $(this).attr(“height”) != null && $(this).attr(“height”) != "" ? h = $(this).attr(“height”) : h = 500 }

acredito que de certo tbm

var h = { $(this).attr(“height”) != null && $(this).attr(“height”) != "" ? $(this).attr(“height”) : 500 }

Às vezes uma “funçãozinha” aumenta e muito a leitura do código…

function defineDimension(el, dim, default) {
    dim = $(el).attr(dim);
    return (dim != null && dim != "" && dim != undefined) ? dim : default;
    // return dim ? dim : default; // nao tenho certeza se atende...
}

var h = defineDimension(this, 'height', 500);
var w = defineDimension(this, 'width', 600);

E você ainda ganha praticidade se a regra mudar, é só alterar a função…

2 curtidas

Olá redevops blz? Obrigado pelo retorno… desculpe minha falta de conhecimento… mas essa melhoria é para dentro de uma função, não sei adaptar para colocar em uma função só

Mas o exemplo que mostrei faz exatamente isso

É que as variáveis estão fora da Function, então pensei que estivesse falando de outra.

O que já indica que qualquer outro escopo pode chamar a função após ela ter sido criada

inclusive outra função, por exemplo…

function defineDimension(el, dim, default) {
    // ... corpo da função...
}

function main() {
    var element = document.getElementById('field');
    var w = defineDimension(element, 'width', 600);
    var h = defineDimension(element, 'height', 500);
    // ...continua o código principal...
}
1 curtida

Ainda não testei (pq tenho que subir os arquivos para homologação devido a algumas burocracias aqui (e só la vou ter a real certeza se funcionou, pq as vezes da uns conflitos estranhos)…

Mas deixei assim:

           var h = $(this).attr(data-openpopup-height);
			var w = $(this).attr(data-openpopup-width);
			
			h = (h != null && h != "" && h != undefined) ? h : 500;
			w = (w != null && w != "" && w != undefined) ? w : 600;