SlideShare une entreprise Scribd logo
1  sur  115
Télécharger pour lire hors ligne
Eduardo Mendes (edumendes@gmail.com)
jQuery e CSS
1
Eduardo Mendes (edumendes@gmail.com)2
Separation of Concerns
Descrição
do Conteúdo
Apresentação

do Conteúdo
Controle do

comportamento
deste Conteúdo
Eduardo Mendes (edumendes@gmail.com)3
jQuery e CSS
.css(<attr>, <value>)
$(this).css("font-size", “10px”).css(“border”, “1px solid");
.css({<attr>:<value>, <attr>:<value>,})
$(this).css({“font-size”:”10px”,”border" : "1px solid”});
Eduardo Mendes (edumendes@gmail.com)4
jQuery e CSS
.show()
$(this).css("display", “block”);
.hide()
$(this).css("display", “none”);
Eduardo Mendes (edumendes@gmail.com)5
jQuery e CSS
.addClass() .removeClass()
.toggleClas()
Eduardo Mendes (edumendes@gmail.com)6
jQuery e CSS
$(this).animate({'top': '0px'});
$(this).hasClass('nomeDaClasse');
Eduardo Mendes (edumendes@gmail.com)
Ajax Básico
7
Eduardo Mendes (edumendes@gmail.com)8
Revelar conteúdo
Eduardo Mendes (edumendes@gmail.com)9
Código sem Ajax
<li class="bebida promocao" data-preco="15.00">
<h3>Lemon Breeze</h3>
<p>R$ 15.00</p>
<button>Veja a Receita</button>
<div class="receita">
<p>Um drinks mais que … </p>
<a href="#" class="expandir">Veja a bebida</a>
<img src="imagens/yellow.gif"/>
</div>
</li>
index.html
$('.bebidas’).on(‘click','button', function () {
$(this).closest(".bebida").find(".receita").slideDown();
});
$('.bebidas').on('click', ‘.expandir', function() {
$(this).closest(".bebida").find("img").show();
});
application.js
apresenta o elemento oculto
quando é clicado
exibe a imagem
quando é clicado
QUal seria a forma
de apresentar este conteúdo
de maneira dinâmica?
Eduardo Mendes (edumendes@gmail.com)
$.ajax(url [, settings])
10
url
obrigatória
settings
configurações opcionais
conjunto chave/valor que configura
a requisição AJAX
• success: só executa quando

a chamada a url funciona

corretamente
executa uma requisição
HTTP assíncrona
Eduardo Mendes (edumendes@gmail.com)11
Código sem Ajax
<li class="bebida promocao" data-preco="15.00">
<h3>Lemon Breeze</h3>
<p>R$ 15.00</p>
<button>Veja a Receita</button>
<div class="receita">
!
</div>
</li>
index.html
$.ajax(url [, settings])
Eduardo Mendes (edumendes@gmail.com)12
Utilizando uma requisição AJAX
$('.bebidas').on('click', 'button', function () {
!
!
!
!
!
});
$.ajax('receita.html', {
success: function(response) {
$(’.receita').html(response).slideDown();
}
});
<p>Um drinks …</p>
<a href="#" class="expandir">Veja a bebida</a>
<img src="imagens/yellow.gif"/>
application.js
receita.html
só executa quando
a resposta retorna
com sucesso
resposta, que não
é uma página HMTL
completa
Eduardo Mendes (edumendes@gmail.com)
$.get(url, success)
13
url
obrigatória
success
função a ser executada
quando a resposta for
retornada
executa uma requisição
HTTP assíncrona via HTTP GET
Eduardo Mendes (edumendes@gmail.com)14
Atalho com $.get
$('.bebidas').on('click', 'button', function () {
!
!
!
!
!
});
$.ajax('receita.html', {
success: function(response) {
$(’.receita').html(response).slideDown();
}
});
$('.bebidas').on('click', 'button', function () {
!
!
!
});
$.get('receita.html', function(response) {
$(’.receita').html(response).slideDown();
});
equivalentes
Eduardo Mendes (edumendes@gmail.com)15
Como enviar parâmetros?
$.ajax('receita.html', {
success: function(response) {
$(".receita").html(response).slideDown();
}
});
sempre recupera o mesmo arquivo
Como criar um site em que a requisição levasse em conta o ID da receita?
receita.html?id=123
Eduardo Mendes (edumendes@gmail.com)16
Como enviar parâmetros?
$.ajax(‘receita.html?id=123', {
success: function(response) {
$(".receita").html(response).slideDown();
}
});
sempre recupera o mesmo arquivo
$.ajax(‘receita.html’, {
success: function(response) {
$(".receita").html(response).slideDown();
},
data: {“id”: 123}
});
Eduardo Mendes (edumendes@gmail.com)17
Como enviar parâmetros?
$.ajax(‘receita.html’, {
success: function(response) {
$(".receita").html(response).slideDown();
},
});
<div class=“receita” data-id=“123”>
data: {id: $(“.receita”).data("id") }
Eduardo Mendes (edumendes@gmail.com)
$.ajax(url [, settings])
18
• success: só executa quando

a chamada a url funciona

corretamente
executa uma requisição
HTTP assíncrona
• error: executa quando ocorre

um timeout, erro no servidor, 

ou a requisição é abortada
• timeout: indica em ms quanto a

requisição deve deve esperar
• beforeSend: executa antes da

requisição ajax
• complete: executa após a execução

da requisição com sucesso ou erro
Eduardo Mendes (edumendes@gmail.com)19
Manipulando requisições com falha
$('.bebidas').on('click', 'button', function () {
$.ajax('http://www.fa7.edu.br/pos-si/receita.html', {
success: function(response) {
$(".receita").html(response).slideDown();
}
!
!
!
});
});
,
error: function(request, errorType, errorMessage) {
alert('Error: ' + errorType + ', mensagem: ' + errorMessage);
}
• error: executa quando ocorre

um timeout, erro no servidor, 

ou a requisição é abortada
Eduardo Mendes (edumendes@gmail.com)20
Manipulando requisições com falha
$('.bebidas').on('click', 'button', function () {
$.ajax('http://www.fa7.edu.br/pos-si/receita.html', {
success: function(response) {
$(".receita").html(response).slideDown();
},
error: function(request, errorType, errorMessage) { ... },
!
!
!
!
!
!
!
!
});
});
timeout: 3000,
beforeSend: function() {
$(".bebidas").addClass("carregando");
}
complete: function() {
$(".bebidas").removeClass("carregando");
}
Eduardo Mendes (edumendes@gmail.com)
JavaScript: Objetos
21
Eduardo Mendes (edumendes@gmail.com)
Objetos em
JavaScript
Uma entidade independente com
propriedades e tipo
como em outras linguagens as
propriedades são acessadas pela
notação do ponto
22
variavel
Objeto
idade=10
variavelDoObjeto.nomeDaPropriedade o.idade
Eduardo Mendes (edumendes@gmail.com)
Criando objetos
23
var carro = new Object();
!
carro.fabricante = "KIA";
carro.modelo = "Picanto";
carro.ano = 2012;
carro["fabricante"] = "Volks";
carro["modelo"] = "Gol";
carro["ano"] = 2013;
pode ser utilizado como
um array associativo
Eduardo Mendes (edumendes@gmail.com)
Objetos

Literais
24
var moto = {cor: "vermelha", rodas: 4, cilindros: 4};
Eduardo Mendes (edumendes@gmail.com)
Função

Construtora
25
function Carro(fabricante, modelo, ano) {
this.fabricante = fabricante;
this.modelo = modelo;
this.ano = ano;
}
var outroCarro =
new Carro("Hyundai", "Tucson", 2009);
!
var aqueleCarro =
new Carro("Ford", "Fiesta", 2014);
Eduardo Mendes (edumendes@gmail.com)
Métodos
26
var moto = {cor: "vermelha", rodas: 4, cilindros: 4};
Como foi visto
os objetos são formados por
propriedades
Eduardo Mendes (edumendes@gmail.com)
Métodos
27
variavelDoObjeto.nomeDoMetodo =
nome_funcao;
São funções associadas a um objeto…
ou é uma propriedade de um objeto

que é uma função
!
um método é uma função atribuída

a uma propriedade do objeto
var meuObjeto = {
meuMetodo: function(params) {
// algum comportamento
}
};
Eduardo Mendes (edumendes@gmail.com)28
Métodos
function Moto(cor, rodas, cilindros) {
this.cor = cor;
this.rodas = rodas;
this.cilindros = cilindros;
!
}
function exibirDados() {
var resultado =
"Dados da moto: cor - " + this.cor
+ ", rodas: " + this.rodas
+ ", cilindros: " + this.cilindros;
alert(resultado);
}
this.exibirDados = exibirDados;
Eduardo Mendes (edumendes@gmail.com)
Encapsulando comportamento
jQuery em objetos
29
Eduardo Mendes (edumendes@gmail.com)30
Refatorando
$(document).ready(function () {
$(".bebidas").on('click', 'button', function () {
$.ajax('receita.html', {
success: function(response) { $(".receita").html(response).slideDown();
},
error: function(request, errorType, errorMessage) {
alert('Error: ' + errorType + ', mensagem: ' + errorMessage);
},
timeout: 3000,
beforeSend: function() { $(".bebidas").find("button").addClass("carregando"); },
complete: function() { $(".bebidas").find("button").removeClass("carregando"); }
});
});
!
$('.bebidas').on('click', '.expandir', function(event) {
event.preventDefault();
$(".bebida").find("img").show();
});
});
Eduardo Mendes (edumendes@gmail.com)31
Refatorando
var receita = {
init: function() {
//manipuladores de eventos
//já existentes
}
};
ele vai executar toda a operação
que foi feita dentro de ready
$(document).ready(function () {
receita.init();
}
facilita o entendimento
do que acontece
Eduardo Mendes (edumendes@gmail.com)32
Refatorando
var receita = {
init: function() {
!
!
!
!
!
!
!
}
};
$(document).ready(function () {
receita.init();
}
$('.bebidas').on('click', 'button', function () {
$.ajax('receita.html', { ... });
});
!
$('.bebidas').on('click', '.expandir', function(event) {});
Eduardo Mendes (edumendes@gmail.com)33
Refatorando
var receita = {
init: function() {
!
!
},
!
!
!
!
!
};
$(document).ready(function () {
receita.init();
}
$('.bebidas').on('click', 'button', function () {});
$('.bebidas').on('click', '.expandir', function(event) {…});
!
!
!
$.ajax('receita.html', { ... });
carregamentoOk: function() {
!
}
Eduardo Mendes (edumendes@gmail.com)34
Refatorando
var receita = {
init: function() {
!
!
},
!
!
!
!
!
};
$(document).ready(function () {
receita.init();
}
$('.bebidas').on('click', 'button', this.carregamentoOK);
$('.bebidas').on('click', '.expandir', function(event) {…});
!
!
!
$.ajax('receita.html', { ... });
carregamentoOk: function() {
!
}
o mesmo pode ser feito para
o carregento da imagem
Eduardo Mendes (edumendes@gmail.com)
jQuery com Funções
Construtoras
35
Eduardo Mendes (edumendes@gmail.com)36
Objeto Literal
var receita = {
init: function() {
//inic. da receita
}
};
!
$(document).ready(function () {
receita.init();
}
limitada a uma
única receita
function Receita(sabor) {
//inic. do sabor da receita
!
}
!
!
$(document).ready(function () {
!
!
}
múltiplas bebidas
Função Construtora
var limao = new Receita('limao');
var negro = new Rece‘ta('negro');
Eduardo Mendes (edumendes@gmail.com)37
Refatorando
var receita = {
init: function() {
$('.bebidas').on('click', 'button', this.carregamentoOK);
$('.bebidas').on('click', '.expandir', this.exibirImagem);
},
carregamentoOk: function() {…},
exibirImagem: function() {…}
};
$(document).ready(function () {
receita.init();
}
Eduardo Mendes (edumendes@gmail.com)38
Refatorando
function Receita(el) {
this.el = el;
//metodos auxiliares
//manipuladores de eventos
}
um elemento jQuery
que será manipulado
$(document).ready(function () {
var limao = new Receita($("#limao"));
var negro = new Receita($("#negro"));
});
executa o comportamento
para cada bebida
Eduardo Mendes (edumendes@gmail.com)39
Refatorando
function Receita(el) {
this.el = el;
!
!
!
!
!
}
$(document).ready(function () {
var limao = new Receita($("#limao"));
var negro = new Receita($("#negro"));
});
this.carregamentoOk = function() {...}
this.exibirFoto = function(event) {...}
!
this.el.on('click', 'button', this.carregamentoOk);
this.el.on('click', '.expandir', this.exibirFoto);
as referências dentro
das funções precisarão
ser revisadas
Eduardo Mendes (edumendes@gmail.com)40
Refatorando
function Receita(el) {
this.el = el;
!
!
!
!
!
!
!
!
!
!
this.el.on('click', 'button', this.carregamentoOk);
this.el.on('click', '.expandir', this.exibirFoto);
}
atingirá qualquer
elemento de classe receitathis.carregamentoOk = function() {
$.ajax('receita.html', {
timeout: 3000,
success: function(response) {
$('.receita').html(response).slideDown();
}
});
Eduardo Mendes (edumendes@gmail.com)41
Refatorando
function Receita(el) {
this.el = el;
!
!
!
!
!
!
!
!
!
this.el.on('click', 'button', this.carregamentoOk);
this.el.on('click', '.expandir', this.exibirFoto);
}
this.carregamentoOk = function() {
$.ajax('receita.html', {
timeout: 3000,
success: function(response) {
.html(response).slideDown();
}
});
this.receita = this.el.find(".receita");
this.receita
Eduardo Mendes (edumendes@gmail.com)42
Funciona?
this incorreto
Eduardo Mendes (edumendes@gmail.com)43
Refatorando
function Receita(el) {
this.el = el;
!
!
!
!
!
!
!
!
!
this.el.on('click', 'button', this.carregamentoOk);
this.el.on('click', '.expandir', this.exibirFoto);
}
this.carregamentoOk = function() {
$.ajax('receita.html', {
timeout: 3000,
success: function(response) {
.html(response).slideDown();
}
});
this.receita = this.el.find(".receita");
this.receita
dentro da $.ajax, this
se refere às configurações
Eduardo Mendes (edumendes@gmail.com)44
Refatorando
function Receita(el) {
this.el = el;
!
!
!
!
!
!
!
!
!
!
!
this.el.on('click', 'button', this.carregamentoOk);
this.el.on('click', '.expandir', this.exibirFoto);
}
this.carregamentoOk = function() {
$.ajax('receita.html', {
timeout: 3000,
!
success: function(response) {
this.receita.html(response).slideDown();
}
});
this.receita = this.el.find(".receita");
var that = this;
context: that,
configura quem é o this
dentro do callback
Eduardo Mendes (edumendes@gmail.com)45
Refatorando
this.exibirFoto = function(event) {
event.preventDefault();
$(".bebida").find("img").show();
}
Eduardo Mendes (edumendes@gmail.com)46
Refatorando
this.exibirFoto = function(event) {
event.preventDefault();
that.el.find("img").show();
}
Eduardo Mendes (edumendes@gmail.com)47
Funciona?
Eduardo Mendes (edumendes@gmail.com)
Forms
48
Eduardo Mendes (edumendes@gmail.com)49
Submetendo via POST com jQuery Ajax
$(document).ready(function () {
$('form').on('submit', function(e) {
$.ajax('pedidos.html', {
type: 'POST'
});
});
});
Eduardo Mendes (edumendes@gmail.com)50
Formulário
Eduardo Mendes (edumendes@gmail.com)51
Submetendo via POST com jQuery Ajax
$(document).ready(function () {
$('form').on('submit', function(e) {
$.ajax('pedidos.html', {
type: 'POST'
});
});
});
Eduardo Mendes (edumendes@gmail.com)52
Submetendo via POST com jQuery Ajax
$(document).ready(function () {
$('form').on('submit', function(event) {
event.preventDefault();
$.ajax('pedidos.html', {
type: 'POST'
});
});
});
e os dados?
Eduardo Mendes (edumendes@gmail.com)53
Submetendo via POST com jQuery Ajax
$(document).ready(function () {
$('form').on('submit', function(event) {
event.preventDefault();
$.ajax('pedidos.html', {
type: 'POST'
});
});
}); <form action="pedidos.html">
<select name="sabor" id="sabor">
<option>Limao</option>
<option>Negro</option>
</select>
<input type="text" id="quantidade" name="quantidade" value="1"/>
<input type="submit" value="FAZER O PEDIDO" />
</form>
Eduardo Mendes (edumendes@gmail.com)54
Submetendo os dados
$(document).ready(function () {
$('form').on('submit', function(event) {
event.preventDefault();
$.ajax('pedidos.html', {
type: ‘POST’,
!
!
!
!
});
});
});
data: {"sabor": $("#sabor").val(),
"quatidade": $("#quantidade").val() }
Eduardo Mendes (edumendes@gmail.com)55
Submetendo os dados
$(document).ready(function () {
$('form').on('submit', function(event) {
event.preventDefault();
$.ajax('pedidos.html', {
type: ‘POST’,
data:
!
!
!
});
});
});
$('form').serialize()
.serialize
cria uma string
de submissão
com todos os elementos do
formulário
Eduardo Mendes (edumendes@gmail.com)56
Submetendo os dados
$(document).ready(function () {
$('form').on('submit', function(event) {
event.preventDefault();
$.ajax('pedidos.html', {
type: ‘POST’,
data:
!
!
!
!
});
});
});
$('form').serialize()
success: function(result) {
$('form').remove();
$('#pedido').hide().html(result).fadeIn();
}
Eduardo Mendes (edumendes@gmail.com)57
Funciona?
Eduardo Mendes (edumendes@gmail.com)
jQuery, Ajax e JSON
58
Eduardo Mendes (edumendes@gmail.com)59
<p>
Seu pedido de 4 sanduiches,
do tipo Hamburguer,
foi registrado
no valor de R$ 20.00.
Aguarde ser chamado!
Número do pedido: 86
</p>
{
"pedido": 86,
"sanduiche": "Hambuguer",
"quantidade": 4,
"total": 20.00
}
HTML JSON
Servidor decide como
o HTML é formatado
O servidor fornece os dados que pode ser
apresentado de maneiras diferentes
JSON - Java Script Object Notation
Um formato de dados para se utilizar em web
Eduardo Mendes (edumendes@gmail.com)60
Este código trabalha com HTML formatado
$(document).ready(function () {
$('form').on('submit', function(event) {
var form = $(this);
event.preventDefault();
$.ajax('pedidos.html', {
type: 'POST',
data: form.serialize(),
success: function(result) {
form.remove();
$('#pedido').hide().html(result).fadeIn();
}
});
});
});
Eduardo Mendes (edumendes@gmail.com)61
Este código trabalha com HTML formatado
$('form').on('submit', function(event) {
var form = $(this);
event.preventDefault();
$.ajax('pedidos.html', {
type: 'POST',
data: form.serialize(),
!
success: function(result) {
form.remove();
$('#pedido').hide().html(result).fadeIn();
}
!
});
});
dataType: 'json',
,
contentType: 'application/json'
transforma a resposta
em JSON
o resultado não é HTML
então é preciso criar um
nó JSON
solicita que a resposta
seja no formato JSON
Eduardo Mendes (edumendes@gmail.com)62
Este código trabalha com HTML formatado
success: function(result) {
form.remove();
!
!
!
!
!
!
}
{
"pedido": 86,
"sanduiche": "Hambuguer",
"quantidade": 4,
"total": 20.00
}
result
<p>Pedido: 86. Sanduiche: Hamburguer. Quantidade: 4. Total: R$ 20.00</p>
var texto = $("<p></p>");
texto.append("Pedido: “ + result.pedido + ". ");
texto.append("Quantidade: “ + result.quantidade + “. ");
texto.append("Sanduiche: “ + result.sanduiche + ". ");
texto.append("Total: “ + result.total + ". ");
Json vai ser convertido
em um objeto JavaScript
$('#pedido').hide().html(msg).fadeIn();
Cria e adiciona o nó DOM
Eduardo Mendes (edumendes@gmail.com)63
Refatorando
$.ajax('pedidos.html', {…}); <form action=“/pedidos.html”
method=“post">
…
</form>
$.ajax(‘pedidos.html’).attr(‘action’), {…});
.attr(<atributo>); .attr(<atributo>, <valor>);
métodos jQuery
Eduardo Mendes (edumendes@gmail.com)64
Código finalizado
$('form').on('submit', function (event) {
var form = $(this);
event.preventDefault();
$.ajax(form.attr('action'), {
type: 'POST',
dataType: 'json',
data: form.serialize(),
success: function (result) {
form.remove();
var texto = $("<p></p>");
texto.append("Pedido: " + result.pedido + ". ");
texto.append("Quantidade: " + result.quantidade + ". ");
texto.append("Sanduiche: " + result.sanduiche + ". ");
texto.append("Total: " + result.total + ". ");
$('#pedido').hide().html(msg).fadeIn();
},
contentType: 'application/json'
});
});
Eduardo Mendes (edumendes@gmail.com)
Métodos úteis	
65
Eduardo Mendes (edumendes@gmail.com)66
Ajax & JSON
<h1>Bem-vindo ao jQuery Festas</h1>
<button>Bebida em Destaque</button>
!
<div class="destaque">
<h2>Destaque</h2>
<img src=""/>
<p></p>
</div>
Eduardo Mendes (edumendes@gmail.com)67
Ajax & JSON
<h1>Bem-vindo ao jQuery Festas</h1>
<button>Bebida em Destaque</button>
!
<div class="destaque">
<h2>Destaque</h2>
<img src=""/>
<p></p>
</div>
$('button').on('click', function () {
$.ajax('bebidas/favoritas/1', {
contentType: 'application/json',
dataType: 'json',
success: function(result) {
{
"nome": "Lemon Breeze",
"imagem": "imagens/yellow.gif"
}
var destaque = $('.destaque');
destaque.find('p').html(
destaque.find('img')
result.nome);
.attr(‘src', result.imagem);
}
});
});
e se existissem
múltiplos destaques?
68
Eduardo Mendes (edumendes@gmail.com)69
JSON com vários resultados
{
"nome": "Lemon Breeze",
"imagem": "imagens/yellow.gif"
},
[
!
!
!
!
{
"nome": "Dark Juice",
"imagem": "imagens/black.gif"
},
{
"nome": "Chai Tea",
"imagem": "imagens/chai.gif"
}
]
success: function(result) {
var destaque = $('.destaque');
destaque.find('p').html(result.nome);
destaque.find('img')
.attr('src', result.imagem);
}
result
application.js
O resultado é um
array de objetos
precisa-se de um laço
para cada destaque
Eduardo Mendes (edumendes@gmail.com)70
$.each -> iteração sobre um array
success: function(result) {
var destaque = $(‘.destaque );
destaque.find(‘p').html( .nome);
destaque.find('img')
.attr('src', .imagem);
}
application.js
<li class="destaque-0">
…
</li>
!
<li class="destaque-1">
…
</li>
!
<li class="destaque-2">
…
</li>
index.html
$.each(colecao, function(<indice>, <objeto>) {});
Executa a função para cada objeto da coleção
$.each(result, function(indice, bebida) {
-' + indice
bebida
bebida
Eduardo Mendes (edumendes@gmail.com)
E quando a quantidade de
informação for variável?
71
Eduardo Mendes (edumendes@gmail.com)72
E quando a quantidade de informação for variável?
Eduardo Mendes (edumendes@gmail.com)73
Transforme um array de objetos em HTML	
$('.atualizar-pedidos').on('click', function() {
$.ajax('status/todos.json', {
contentType: 'application/json',
dataType: 'json',
success: function (result) {...}
});
});
[
{
"numero": "50",
"status": "Não iniciado"
},
{
"numero": "45",
"status": "Entregue"
},
{
"numero": "47",
"status": "Cancelado"
}
!
]
result
$.getJSON(url, success);
$.getJSON('status/todos.json', function(result) {});
o resultado será um
array de objetos
application.js
Eduardo Mendes (edumendes@gmail.com)74
Transforme um array de objetos em HTML	
$('.atualizar-pedidos').on('click', function() {
$.getJSON('status/todos.json', function(result) {
!
!
});
});
[
{
"numero": "50",
"status": "Não iniciado"
},
{
"numero": "45",
"status": "Entregue"
},
{
"numero": "47",
"status": "Cancelado"
}
!
]
result
<li>
<h3>numero</h3>
<p>status</p>
</li>
<li>
<h3>…</h3>
<p>…</p>
</li>
<li>
<h3>…</h3>
<p>…</p>
</li>
é precisso transformar
para um formato HTML
application.js
var pedidos = ????
$('ul').html(pedidos);
Eduardo Mendes (edumendes@gmail.com)75
Array com $.map()
$.map(colecao, function(<item>, <indice>) {});
a coleção pode ser um array
a ordem é diferente do each
o método map um array modificado a partir do array passado com o parâmetro
var numeros = [1,2,3,4]
!
var numeros-novos = $.map(numeros, function(item, indice) { return item + 1 });
numeros [1, 2, 3, 4]
numeros-novos [2, 3, 4, 5]
Eduardo Mendes (edumendes@gmail.com)76
Do JSON para o HTML
!
{
"numero": "50",
"status": "Não iniciado"
},
{
"numero": "45",
"status": "Entregue"
},
{
"numero": "47",
"status": "Cancelado"
}
[ ]$.map(result, function(pedido, indice) {
var item-pedido = $(“<li></li>”);
return item-pedido;
});
[ ]<li></li> <li></li> <li></li>
Eduardo Mendes (edumendes@gmail.com)77
Do JSON para o HTML
!
{
"numero": "50",
"status": "Não iniciado"
},
{
"numero": "45",
"status": "Entregue"
},
{
"numero": "47",
"status": "Cancelado"
}
[ ]$.map(result, function(pedido, indice) {
var item-pedido = $(“<li></li>”);
!
!
return item-pedido;
});
[ ]
$(‘<h3> Pedido: ’ + pedido.numero + ‘</h3>’).appendTo(item-pedido);
$(‘<p>’ + pedido.status + ‘</p>’).appendTo(item-pedido);
<li>
<h3>Pedido: 50</h3>
<p>Não iniciado</p>
</li>
<li>
<h3>Pedido: 45</h3>
<p>Entregue</p>
</li>
<li>
<h3>Pedido: 47</h3>
<p>Cancelado</p>
</li>
Eduardo Mendes (edumendes@gmail.com)78
Do JSON para o HTML
$.map(result, function (pedido, indice) {
var item_de_pedidos = $('<li></li>');
$('<h2>Pedido: ' + pedido.numero + '</h2>').appendTo(item_de_pedidos);
$('<p>' + pedido.status + '</p>').appendTo(item_de_pedidos);
return item_de_pedidos;
});
$('.atualizar-pedidos').on('click', function () {
$.getJSON('status/todos.json', function (result) {
var pedidos =
retorna-se a lista
alterada
$('ul').html(pedidos);
});
});
Eduardo Mendes (edumendes@gmail.com)
E quando a quantidade de informação for
79
Eduardo Mendes (edumendes@gmail.com)
Plugins
80
Eduardo Mendes (edumendes@gmail.com)
Plugin
81
Uma nova funcionalidade que pode
ser chamada a partir de uma
seleção jQuery
Pode ser reutilizada em outros
projetos
encapsulamento
e reaproveitamento
de código
Eduardo Mendes (edumendes@gmail.com)
a função $	
$.(a).css(“color”, “yellow”);
a coleção pode ser um array
a ordem é diferente do each
Quando se utiliza a função $, o valor retornado é um objeto jQuery
$.(a).css(…)
Este objeto contém todos os métodos jQuery que estamos utilizando
$.(a).click(…) $.(a).addClass(…)
Além de todas as propriedades associadas a eles
Eduardo Mendes (edumendes@gmail.com)
$.fn
83
Todos este métodos
estão no objeto $.fn
Novos métodos (plugins)
também deverão
ser adicionados a ele
Eduardo Mendes (edumendes@gmail.com)84
Caminho simples para o plugin
A forma mais simples é adicionar
uma propriedade ao $.fn
$.fn.umPlugin = function() {
// lógica encapsulada
}
Eduardo Mendes (edumendes@gmail.com)85
Por partes
$ apelido para o objeto jQuery
window.jQuery = window.$ = jQuery
então porque não utilizar:
Eduardo Mendes (edumendes@gmail.com)86
Por partes
var jQuery = function(selector, context) {
return new jQuery.fn.init(selector, context, rootjQuery);
}
jQuery é uma função Objeto
jQuery.fn = jQuery.prototype
uma propriedade que todos
os objetos herdam de Global
Eduardo Mendes (edumendes@gmail.com)
Função

Construtora
87
function Carro(fabricante, modelo, ano) {
this.fabricante = fabricante;
this.modelo = modelo;
this.ano = ano;
}
var outroCarro =
new Carro("Hyundai", "Tucson", 2009);
Eduardo Mendes (edumendes@gmail.com)88
function Carro(fabricante, modelo, ano) {
this.fabricante = fabricante;
this.modelo = modelo;
this.ano = ano;
}
var outroCarro =
new Carro("Hyundai", "Tucson", 2009);
outroCarro.abs = true;
var aqueleCarro =
new Carro("Ford", "Fiesta", 2014);
Eduardo Mendes (edumendes@gmail.com)89
function Carro(fabricante, modelo, ano) {
this.fabricante = fabricante;
this.modelo = modelo;
this.ano = ano;
}
var outroCarro =
new Carro("Hyundai", "Tucson", 2009);
outroCarro.abs = true;
var aqueleCarro =
new Carro("Ford", "Fiesta", 2014);
Carro.prototype.abs = true; a propriedade estará disponível
em todas as infâncias do objeto
Eduardo Mendes (edumendes@gmail.com)90
Um plugin simples
“Amarelar" o que se quiser
$.(a).css(“color”, “yellow”);
$.fn.amarelar = function() {
// lógica encapsulada
}
Eduardo Mendes (edumendes@gmail.com)91
Um plugin simples
“Amarelar" o que se quiser
$.fn.amarelar = function() {
this.css(‘color’, ‘yellow’);
}
$(document).ready(function () {
$('a').amarelar();
});
Eduardo Mendes (edumendes@gmail.com)92
Encadeamento
“Amarelar" o que se quiser
$.fn.amarelar = function() {
this.css(‘color’, ‘yellow’);
return this;
}
$(document).ready(function () {
$(‘a’).amarelar().fadeIn();
});
Eduardo Mendes (edumendes@gmail.com)
Para estar disponível
em todas as instâncias
93
utilize
$.fn
Eduardo Mendes (edumendes@gmail.com)
E se existirem outros plugins
que utilizam parâmetros
com mesmos nomes?
94
e quanto

à $??
Eduardo Mendes (edumendes@gmail.com)95
Protegendo o escopo
Utilize Funções IIFE (Immediately-Invoked Function Expressions)
padrão comum
para evitar problemas de
sombreamento de variáveis
tudo que for declarado

tem escopo somente nesse bloco
(function() {
var qualquer = “Hello”;
})();
var carro = new Carro();
!
(function(c) {
c.ligar();
})(carro);
(function($) {
…
})(jQuery);
modo jQuery
Eduardo Mendes (edumendes@gmail.com)96
Um plugin com IIFE
“Amarelar" o que se quiser
$.fn.amarelar = function() {
this.css(‘color’, ‘yellow’);
}
$(document).ready(function () {
$('a').amarelar();
});
Eduardo Mendes (edumendes@gmail.com)97
Um plugin com IIFE
“Amarelar" o que se quiser
(function($) {
$.fn.amarelar = function() {
this.css(‘color’, ‘yellow’);
}
})(jQuery);
$(document).ready(function () {
$('a').amarelar();
});
Eduardo Mendes (edumendes@gmail.com)
Preços
98
Eduardo Mendes (edumendes@gmail.com)99
index.html
<ul class="bebidas">
<li class="bebida" data-preco="15.00">
<p>
<img src="imagens/yellow.gif"/>
</p>
<h3>Lemon Breeze</h3>
<button>Consultar Preco</button>
</li>
<li class="bebida" data-preco="20.00">
…
</li>
<li class="bebida" data-preco="17.00">
…
</li>
$('.bebida').precificar();
Eduardo Mendes (edumendes@gmail.com)100
Criando um plugin
$.fn.precificar = function() {
console.log('Chamando preficicar');
console.log(this);
}
Disponibiliza o método
como uma função jQuery
o this será o objeto jQuery
onde o plugin foi chamado
$('.bebida').precificar();
Eduardo Mendes (edumendes@gmail.com)101
Criando um plugin e adicionando comportamento
$.fn.precificar = function() {
var bebida = this;
bebida.on('click', 'button', function() {
var preco = bebida.data('preco');
var detalhes = $('<p>Preco: ' + preco + '</p>');
$(this).hide();
bebida.append(detalhes);
});
};
$(document).ready(function () {
$('.bebida').precificar();
});
Eduardo Mendes (edumendes@gmail.com)
Preços
102
Eduardo Mendes (edumendes@gmail.com)103
Corrigindo o comportamento
$.fn.precificar = function() {
console.log('Chamando preficicar');
console.log(this);
}
this.each()…
Eduardo Mendes (edumendes@gmail.com)104
Criando um plugin e adicionando comportamento
$.fn.precificar = function() {
var bebida = this;
bebida.on('click', 'button', function() {
var preco = bebida.data('preco');
var detalhes = $('<p>Preco: ' + preco + '</p>');
$(this).hide();
bebida.append(detalhes);
});
};
Eduardo Mendes (edumendes@gmail.com)105
Criando um plugin e adicionando comportamento
$.fn.precificar = function() {
!
var bebida = this;
bebida.on('click', 'button', function() {
var preco = bebida.data('preco');
var detalhes = $('<p>Preco: ' + preco + '</p>');
$(this).hide();
bebida.append(detalhes);
});
!
};
this.each(function () {
});
Eduardo Mendes (edumendes@gmail.com)106
Plugins com parâmetros
$(document).ready(function () {
$('.bebida').precificar({ dias:5 });
});
$.fn.precificar = function(opcoes) {
…
var preco = bebida.data('preco');
var detalhes = $(‘<p>Preco:'
+ opcoes.dias
+ ' drinks por ‘
+ opcoes.dias * preco + '</p>');
e se fosse necessário
parâmetros com valores default?
Eduardo Mendes (edumendes@gmail.com)107
Parâmetros opcionais
$(document).ready(function () {
$('.bebida').precificar({ dias:5 });
});
$(document).ready(function () {
$(‘.bebida').precificar();
});
com ou sem parâmetros
$.fn.precificar = function(opcoes) {
…
Eduardo Mendes (edumendes@gmail.com)108
Parâmetros opcionais com $.extend
Combina os objetos
$.extend(target[, objeto1, objeton]);
$.extend({ dias: 3 }, { preco: 5 }); { dias: 3, preco: 5 }
$.extend({ dias: 3 }, {}); { dias: 3 }
$.extend({ dias: 3 }, { dias: 5 }); { dias: 3 }
a forma de configurar
um valor default
Eduardo Mendes (edumendes@gmail.com)109
Adicionando o parâmetro opcional
$.fn.precificar = function (opcoes) {
this.each(function () {
var bebida = $(this);
console.log(bebida);
bebida.on('click.precificar', 'button', function () {
var preco = bebida.data('preco');
…
});
});
};
Eduardo Mendes (edumendes@gmail.com)110
Adicionando o parâmetro opcional
$.fn.precificar = function (opcoes) {
this.each(function () {
var bebida = $(this);
console.log(bebida);
bebida.on('click.precificar', 'button', function () {
var preco = bebida.data('preco');
…
});
});
};
var configuracoes = $.extend({dias: 3}, opcoes);
Eduardo Mendes (edumendes@gmail.com)111
Adicionando o parâmetro opcional
$.fn.precificar = function (opcoes) {
this.each(function () {
var bebida = $(this);
var configuracoes = $.extend({dias: 3}, opcoes);
bebida.on('click.precificar', 'button', function () {
var preco = bebida.data('preco');
var detalhes = $('<p>Preco:'
+ configuracoes.dias
+ ' drinks por '
+ configuracoes.dias * preco + '</p>');
$(this).hide();
bebida.append(detalhes);
});
});
};
Eduardo Mendes (edumendes@gmail.com)
Refatorando para parâmetros
112
Eduardo Mendes (edumendes@gmail.com)113
Adicionando o parâmetro opcional
$.fn.precificar = function (opcoes) {
this.each(function () {
var bebida = $(this);
var config = $.extend({dias: 3}, opcoes);
bebida.on('click.precificar', 'button', function () {
var preco = bebida.data('preco');
var detalhes = $('<p>Preco:'
+ config.dias
+ ' drinks por '
+ config.dias * preco + '</p>');
$(this).hide();
bebida.append(detalhes);
});
});
};
Eduardo Mendes (edumendes@gmail.com)114
Adicionando o parâmetro opcional
$.fn.precificar = function (opcoes) {
this.each(function () {
!
var config = $.extend({
dias: 3,
bebida: $(this),
preco: $(this).data(‘preco')
botao: $(this).find(‘button')
}, opcoes);
config.bebida.on('click.precificar', 'button', function () {
var detalhes = $('<p>Preco:' + config.dias + ' drinks por ' +
config.dias * config.preco + '</p>');
config.botao.hide();
config.bebida.append(detalhes);
});
});
};
config.dias
config.bebida
config.preco
config.botao
Eduardo Mendes (edumendes@gmail.com)115
Mais um botão

Contenu connexe

Tendances

JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCAntonio Passos
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webHenrique Gogó
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jqueryYuri Costa
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Loiane Groner
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomNelson Glauber Leal
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicosponto hacker
 

Tendances (20)

JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
Introdução a jQuery
Introdução a jQueryIntrodução a jQuery
Introdução a jQuery
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
Aprenda jQuery 1.3
Aprenda jQuery 1.3Aprenda jQuery 1.3
Aprenda jQuery 1.3
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBC
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações web
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
JDBC
JDBCJDBC
JDBC
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicos
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Java script aula 06 - dom
Java script   aula 06 - domJava script   aula 06 - dom
Java script aula 06 - dom
 

En vedette

Web design responsivo - Criando um site adaptável
Web design responsivo - Criando um site adaptávelWeb design responsivo - Criando um site adaptável
Web design responsivo - Criando um site adaptávelGuto Xavier
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Eduardo Mendes
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpecEduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e EstrategiasEduardo Mendes
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1Eduardo Mendes
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2Eduardo Mendes
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupTaufan Erfiyanto
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Eduardo Mendes
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseMarcos Sousa
 

En vedette (20)

Jquery fundamentals-book-pt-br
Jquery fundamentals-book-pt-brJquery fundamentals-book-pt-br
Jquery fundamentals-book-pt-br
 
Web design responsivo - Criando um site adaptável
Web design responsivo - Criando um site adaptávelWeb design responsivo - Criando um site adaptável
Web design responsivo - Criando um site adaptável
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Rails - parte 1
Rails - parte 1Rails - parte 1
Rails - parte 1
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpec
 
Jquery
JqueryJquery
Jquery
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
RSpec com doubles
RSpec com doublesRSpec com doubles
RSpec com doubles
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com Eclipse
 
Academia java intensivo
Academia java intensivoAcademia java intensivo
Academia java intensivo
 

Similaire à jQuery e CSS manipulação

jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajoliCaue Fajoli
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
Palestra - Iniciando no Jquery
Palestra - Iniciando no JqueryPalestra - Iniciando no Jquery
Palestra - Iniciando no Jquerygrupoweblovers
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfGabrielaMota46
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureVitor Ciaramella
 
Web 2.0 com Ajax: JQuery/PHP (Aula 04)
Web 2.0 com Ajax: JQuery/PHP (Aula 04)Web 2.0 com Ajax: JQuery/PHP (Aula 04)
Web 2.0 com Ajax: JQuery/PHP (Aula 04)Wagner Silva
 
Angular JS, você precisa conhecer
Angular JS, você precisa conhecerAngular JS, você precisa conhecer
Angular JS, você precisa conhecermeet2Brains
 
Sigle Page Application - A nova Web
Sigle Page Application - A nova WebSigle Page Application - A nova Web
Sigle Page Application - A nova WebVictor Cavalcante
 
Cookies
CookiesCookies
Cookiesgannp
 
Segurança e Performance WordPress
Segurança e Performance WordPressSegurança e Performance WordPress
Segurança e Performance WordPressHenrique Mouta
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryMarketing Digital ODIG
 

Similaire à jQuery e CSS manipulação (20)

jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê Fajoli
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Dinamizando Sites Estáticos
Dinamizando Sites EstáticosDinamizando Sites Estáticos
Dinamizando Sites Estáticos
 
Palestra - Iniciando no Jquery
Palestra - Iniciando no JqueryPalestra - Iniciando no Jquery
Palestra - Iniciando no Jquery
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows Azure
 
Web 2.0 com Ajax: JQuery/PHP (Aula 04)
Web 2.0 com Ajax: JQuery/PHP (Aula 04)Web 2.0 com Ajax: JQuery/PHP (Aula 04)
Web 2.0 com Ajax: JQuery/PHP (Aula 04)
 
Angular JS, você precisa conhecer
Angular JS, você precisa conhecerAngular JS, você precisa conhecer
Angular JS, você precisa conhecer
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Sigle Page Application - A nova Web
Sigle Page Application - A nova WebSigle Page Application - A nova Web
Sigle Page Application - A nova Web
 
Cookies
CookiesCookies
Cookies
 
Html dom, eventos, jquery
Html dom, eventos, jqueryHtml dom, eventos, jquery
Html dom, eventos, jquery
 
Componentes para a Web
Componentes para a WebComponentes para a Web
Componentes para a Web
 
Segurança e Performance WordPress
Segurança e Performance WordPressSegurança e Performance WordPress
Segurança e Performance WordPress
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQuery
 

Plus de Eduardo Mendes

Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de ProjetoEduardo Mendes
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de ProjetoEduardo Mendes
 

Plus de Eduardo Mendes (20)

Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de Projeto
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de Projeto
 

jQuery e CSS manipulação

  • 2. Eduardo Mendes (edumendes@gmail.com)2 Separation of Concerns Descrição do Conteúdo Apresentação
 do Conteúdo Controle do
 comportamento deste Conteúdo
  • 3. Eduardo Mendes (edumendes@gmail.com)3 jQuery e CSS .css(<attr>, <value>) $(this).css("font-size", “10px”).css(“border”, “1px solid"); .css({<attr>:<value>, <attr>:<value>,}) $(this).css({“font-size”:”10px”,”border" : "1px solid”});
  • 4. Eduardo Mendes (edumendes@gmail.com)4 jQuery e CSS .show() $(this).css("display", “block”); .hide() $(this).css("display", “none”);
  • 5. Eduardo Mendes (edumendes@gmail.com)5 jQuery e CSS .addClass() .removeClass() .toggleClas()
  • 6. Eduardo Mendes (edumendes@gmail.com)6 jQuery e CSS $(this).animate({'top': '0px'}); $(this).hasClass('nomeDaClasse');
  • 9. Eduardo Mendes (edumendes@gmail.com)9 Código sem Ajax <li class="bebida promocao" data-preco="15.00"> <h3>Lemon Breeze</h3> <p>R$ 15.00</p> <button>Veja a Receita</button> <div class="receita"> <p>Um drinks mais que … </p> <a href="#" class="expandir">Veja a bebida</a> <img src="imagens/yellow.gif"/> </div> </li> index.html $('.bebidas’).on(‘click','button', function () { $(this).closest(".bebida").find(".receita").slideDown(); }); $('.bebidas').on('click', ‘.expandir', function() { $(this).closest(".bebida").find("img").show(); }); application.js apresenta o elemento oculto quando é clicado exibe a imagem quando é clicado QUal seria a forma de apresentar este conteúdo de maneira dinâmica?
  • 10. Eduardo Mendes (edumendes@gmail.com) $.ajax(url [, settings]) 10 url obrigatória settings configurações opcionais conjunto chave/valor que configura a requisição AJAX • success: só executa quando
 a chamada a url funciona
 corretamente executa uma requisição HTTP assíncrona
  • 11. Eduardo Mendes (edumendes@gmail.com)11 Código sem Ajax <li class="bebida promocao" data-preco="15.00"> <h3>Lemon Breeze</h3> <p>R$ 15.00</p> <button>Veja a Receita</button> <div class="receita"> ! </div> </li> index.html $.ajax(url [, settings])
  • 12. Eduardo Mendes (edumendes@gmail.com)12 Utilizando uma requisição AJAX $('.bebidas').on('click', 'button', function () { ! ! ! ! ! }); $.ajax('receita.html', { success: function(response) { $(’.receita').html(response).slideDown(); } }); <p>Um drinks …</p> <a href="#" class="expandir">Veja a bebida</a> <img src="imagens/yellow.gif"/> application.js receita.html só executa quando a resposta retorna com sucesso resposta, que não é uma página HMTL completa
  • 13. Eduardo Mendes (edumendes@gmail.com) $.get(url, success) 13 url obrigatória success função a ser executada quando a resposta for retornada executa uma requisição HTTP assíncrona via HTTP GET
  • 14. Eduardo Mendes (edumendes@gmail.com)14 Atalho com $.get $('.bebidas').on('click', 'button', function () { ! ! ! ! ! }); $.ajax('receita.html', { success: function(response) { $(’.receita').html(response).slideDown(); } }); $('.bebidas').on('click', 'button', function () { ! ! ! }); $.get('receita.html', function(response) { $(’.receita').html(response).slideDown(); }); equivalentes
  • 15. Eduardo Mendes (edumendes@gmail.com)15 Como enviar parâmetros? $.ajax('receita.html', { success: function(response) { $(".receita").html(response).slideDown(); } }); sempre recupera o mesmo arquivo Como criar um site em que a requisição levasse em conta o ID da receita? receita.html?id=123
  • 16. Eduardo Mendes (edumendes@gmail.com)16 Como enviar parâmetros? $.ajax(‘receita.html?id=123', { success: function(response) { $(".receita").html(response).slideDown(); } }); sempre recupera o mesmo arquivo $.ajax(‘receita.html’, { success: function(response) { $(".receita").html(response).slideDown(); }, data: {“id”: 123} });
  • 17. Eduardo Mendes (edumendes@gmail.com)17 Como enviar parâmetros? $.ajax(‘receita.html’, { success: function(response) { $(".receita").html(response).slideDown(); }, }); <div class=“receita” data-id=“123”> data: {id: $(“.receita”).data("id") }
  • 18. Eduardo Mendes (edumendes@gmail.com) $.ajax(url [, settings]) 18 • success: só executa quando
 a chamada a url funciona
 corretamente executa uma requisição HTTP assíncrona • error: executa quando ocorre
 um timeout, erro no servidor, 
 ou a requisição é abortada • timeout: indica em ms quanto a
 requisição deve deve esperar • beforeSend: executa antes da
 requisição ajax • complete: executa após a execução
 da requisição com sucesso ou erro
  • 19. Eduardo Mendes (edumendes@gmail.com)19 Manipulando requisições com falha $('.bebidas').on('click', 'button', function () { $.ajax('http://www.fa7.edu.br/pos-si/receita.html', { success: function(response) { $(".receita").html(response).slideDown(); } ! ! ! }); }); , error: function(request, errorType, errorMessage) { alert('Error: ' + errorType + ', mensagem: ' + errorMessage); } • error: executa quando ocorre
 um timeout, erro no servidor, 
 ou a requisição é abortada
  • 20. Eduardo Mendes (edumendes@gmail.com)20 Manipulando requisições com falha $('.bebidas').on('click', 'button', function () { $.ajax('http://www.fa7.edu.br/pos-si/receita.html', { success: function(response) { $(".receita").html(response).slideDown(); }, error: function(request, errorType, errorMessage) { ... }, ! ! ! ! ! ! ! ! }); }); timeout: 3000, beforeSend: function() { $(".bebidas").addClass("carregando"); } complete: function() { $(".bebidas").removeClass("carregando"); }
  • 22. Eduardo Mendes (edumendes@gmail.com) Objetos em JavaScript Uma entidade independente com propriedades e tipo como em outras linguagens as propriedades são acessadas pela notação do ponto 22 variavel Objeto idade=10 variavelDoObjeto.nomeDaPropriedade o.idade
  • 23. Eduardo Mendes (edumendes@gmail.com) Criando objetos 23 var carro = new Object(); ! carro.fabricante = "KIA"; carro.modelo = "Picanto"; carro.ano = 2012; carro["fabricante"] = "Volks"; carro["modelo"] = "Gol"; carro["ano"] = 2013; pode ser utilizado como um array associativo
  • 24. Eduardo Mendes (edumendes@gmail.com) Objetos
 Literais 24 var moto = {cor: "vermelha", rodas: 4, cilindros: 4};
  • 25. Eduardo Mendes (edumendes@gmail.com) Função
 Construtora 25 function Carro(fabricante, modelo, ano) { this.fabricante = fabricante; this.modelo = modelo; this.ano = ano; } var outroCarro = new Carro("Hyundai", "Tucson", 2009); ! var aqueleCarro = new Carro("Ford", "Fiesta", 2014);
  • 26. Eduardo Mendes (edumendes@gmail.com) Métodos 26 var moto = {cor: "vermelha", rodas: 4, cilindros: 4}; Como foi visto os objetos são formados por propriedades
  • 27. Eduardo Mendes (edumendes@gmail.com) Métodos 27 variavelDoObjeto.nomeDoMetodo = nome_funcao; São funções associadas a um objeto… ou é uma propriedade de um objeto
 que é uma função ! um método é uma função atribuída
 a uma propriedade do objeto var meuObjeto = { meuMetodo: function(params) { // algum comportamento } };
  • 28. Eduardo Mendes (edumendes@gmail.com)28 Métodos function Moto(cor, rodas, cilindros) { this.cor = cor; this.rodas = rodas; this.cilindros = cilindros; ! } function exibirDados() { var resultado = "Dados da moto: cor - " + this.cor + ", rodas: " + this.rodas + ", cilindros: " + this.cilindros; alert(resultado); } this.exibirDados = exibirDados;
  • 29. Eduardo Mendes (edumendes@gmail.com) Encapsulando comportamento jQuery em objetos 29
  • 30. Eduardo Mendes (edumendes@gmail.com)30 Refatorando $(document).ready(function () { $(".bebidas").on('click', 'button', function () { $.ajax('receita.html', { success: function(response) { $(".receita").html(response).slideDown(); }, error: function(request, errorType, errorMessage) { alert('Error: ' + errorType + ', mensagem: ' + errorMessage); }, timeout: 3000, beforeSend: function() { $(".bebidas").find("button").addClass("carregando"); }, complete: function() { $(".bebidas").find("button").removeClass("carregando"); } }); }); ! $('.bebidas').on('click', '.expandir', function(event) { event.preventDefault(); $(".bebida").find("img").show(); }); });
  • 31. Eduardo Mendes (edumendes@gmail.com)31 Refatorando var receita = { init: function() { //manipuladores de eventos //já existentes } }; ele vai executar toda a operação que foi feita dentro de ready $(document).ready(function () { receita.init(); } facilita o entendimento do que acontece
  • 32. Eduardo Mendes (edumendes@gmail.com)32 Refatorando var receita = { init: function() { ! ! ! ! ! ! ! } }; $(document).ready(function () { receita.init(); } $('.bebidas').on('click', 'button', function () { $.ajax('receita.html', { ... }); }); ! $('.bebidas').on('click', '.expandir', function(event) {});
  • 33. Eduardo Mendes (edumendes@gmail.com)33 Refatorando var receita = { init: function() { ! ! }, ! ! ! ! ! }; $(document).ready(function () { receita.init(); } $('.bebidas').on('click', 'button', function () {}); $('.bebidas').on('click', '.expandir', function(event) {…}); ! ! ! $.ajax('receita.html', { ... }); carregamentoOk: function() { ! }
  • 34. Eduardo Mendes (edumendes@gmail.com)34 Refatorando var receita = { init: function() { ! ! }, ! ! ! ! ! }; $(document).ready(function () { receita.init(); } $('.bebidas').on('click', 'button', this.carregamentoOK); $('.bebidas').on('click', '.expandir', function(event) {…}); ! ! ! $.ajax('receita.html', { ... }); carregamentoOk: function() { ! } o mesmo pode ser feito para o carregento da imagem
  • 35. Eduardo Mendes (edumendes@gmail.com) jQuery com Funções Construtoras 35
  • 36. Eduardo Mendes (edumendes@gmail.com)36 Objeto Literal var receita = { init: function() { //inic. da receita } }; ! $(document).ready(function () { receita.init(); } limitada a uma única receita function Receita(sabor) { //inic. do sabor da receita ! } ! ! $(document).ready(function () { ! ! } múltiplas bebidas Função Construtora var limao = new Receita('limao'); var negro = new Rece‘ta('negro');
  • 37. Eduardo Mendes (edumendes@gmail.com)37 Refatorando var receita = { init: function() { $('.bebidas').on('click', 'button', this.carregamentoOK); $('.bebidas').on('click', '.expandir', this.exibirImagem); }, carregamentoOk: function() {…}, exibirImagem: function() {…} }; $(document).ready(function () { receita.init(); }
  • 38. Eduardo Mendes (edumendes@gmail.com)38 Refatorando function Receita(el) { this.el = el; //metodos auxiliares //manipuladores de eventos } um elemento jQuery que será manipulado $(document).ready(function () { var limao = new Receita($("#limao")); var negro = new Receita($("#negro")); }); executa o comportamento para cada bebida
  • 39. Eduardo Mendes (edumendes@gmail.com)39 Refatorando function Receita(el) { this.el = el; ! ! ! ! ! } $(document).ready(function () { var limao = new Receita($("#limao")); var negro = new Receita($("#negro")); }); this.carregamentoOk = function() {...} this.exibirFoto = function(event) {...} ! this.el.on('click', 'button', this.carregamentoOk); this.el.on('click', '.expandir', this.exibirFoto); as referências dentro das funções precisarão ser revisadas
  • 40. Eduardo Mendes (edumendes@gmail.com)40 Refatorando function Receita(el) { this.el = el; ! ! ! ! ! ! ! ! ! ! this.el.on('click', 'button', this.carregamentoOk); this.el.on('click', '.expandir', this.exibirFoto); } atingirá qualquer elemento de classe receitathis.carregamentoOk = function() { $.ajax('receita.html', { timeout: 3000, success: function(response) { $('.receita').html(response).slideDown(); } });
  • 41. Eduardo Mendes (edumendes@gmail.com)41 Refatorando function Receita(el) { this.el = el; ! ! ! ! ! ! ! ! ! this.el.on('click', 'button', this.carregamentoOk); this.el.on('click', '.expandir', this.exibirFoto); } this.carregamentoOk = function() { $.ajax('receita.html', { timeout: 3000, success: function(response) { .html(response).slideDown(); } }); this.receita = this.el.find(".receita"); this.receita
  • 43. Eduardo Mendes (edumendes@gmail.com)43 Refatorando function Receita(el) { this.el = el; ! ! ! ! ! ! ! ! ! this.el.on('click', 'button', this.carregamentoOk); this.el.on('click', '.expandir', this.exibirFoto); } this.carregamentoOk = function() { $.ajax('receita.html', { timeout: 3000, success: function(response) { .html(response).slideDown(); } }); this.receita = this.el.find(".receita"); this.receita dentro da $.ajax, this se refere às configurações
  • 44. Eduardo Mendes (edumendes@gmail.com)44 Refatorando function Receita(el) { this.el = el; ! ! ! ! ! ! ! ! ! ! ! this.el.on('click', 'button', this.carregamentoOk); this.el.on('click', '.expandir', this.exibirFoto); } this.carregamentoOk = function() { $.ajax('receita.html', { timeout: 3000, ! success: function(response) { this.receita.html(response).slideDown(); } }); this.receita = this.el.find(".receita"); var that = this; context: that, configura quem é o this dentro do callback
  • 45. Eduardo Mendes (edumendes@gmail.com)45 Refatorando this.exibirFoto = function(event) { event.preventDefault(); $(".bebida").find("img").show(); }
  • 46. Eduardo Mendes (edumendes@gmail.com)46 Refatorando this.exibirFoto = function(event) { event.preventDefault(); that.el.find("img").show(); }
  • 49. Eduardo Mendes (edumendes@gmail.com)49 Submetendo via POST com jQuery Ajax $(document).ready(function () { $('form').on('submit', function(e) { $.ajax('pedidos.html', { type: 'POST' }); }); });
  • 51. Eduardo Mendes (edumendes@gmail.com)51 Submetendo via POST com jQuery Ajax $(document).ready(function () { $('form').on('submit', function(e) { $.ajax('pedidos.html', { type: 'POST' }); }); });
  • 52. Eduardo Mendes (edumendes@gmail.com)52 Submetendo via POST com jQuery Ajax $(document).ready(function () { $('form').on('submit', function(event) { event.preventDefault(); $.ajax('pedidos.html', { type: 'POST' }); }); }); e os dados?
  • 53. Eduardo Mendes (edumendes@gmail.com)53 Submetendo via POST com jQuery Ajax $(document).ready(function () { $('form').on('submit', function(event) { event.preventDefault(); $.ajax('pedidos.html', { type: 'POST' }); }); }); <form action="pedidos.html"> <select name="sabor" id="sabor"> <option>Limao</option> <option>Negro</option> </select> <input type="text" id="quantidade" name="quantidade" value="1"/> <input type="submit" value="FAZER O PEDIDO" /> </form>
  • 54. Eduardo Mendes (edumendes@gmail.com)54 Submetendo os dados $(document).ready(function () { $('form').on('submit', function(event) { event.preventDefault(); $.ajax('pedidos.html', { type: ‘POST’, ! ! ! ! }); }); }); data: {"sabor": $("#sabor").val(), "quatidade": $("#quantidade").val() }
  • 55. Eduardo Mendes (edumendes@gmail.com)55 Submetendo os dados $(document).ready(function () { $('form').on('submit', function(event) { event.preventDefault(); $.ajax('pedidos.html', { type: ‘POST’, data: ! ! ! }); }); }); $('form').serialize() .serialize cria uma string de submissão com todos os elementos do formulário
  • 56. Eduardo Mendes (edumendes@gmail.com)56 Submetendo os dados $(document).ready(function () { $('form').on('submit', function(event) { event.preventDefault(); $.ajax('pedidos.html', { type: ‘POST’, data: ! ! ! ! }); }); }); $('form').serialize() success: function(result) { $('form').remove(); $('#pedido').hide().html(result).fadeIn(); }
  • 59. Eduardo Mendes (edumendes@gmail.com)59 <p> Seu pedido de 4 sanduiches, do tipo Hamburguer, foi registrado no valor de R$ 20.00. Aguarde ser chamado! Número do pedido: 86 </p> { "pedido": 86, "sanduiche": "Hambuguer", "quantidade": 4, "total": 20.00 } HTML JSON Servidor decide como o HTML é formatado O servidor fornece os dados que pode ser apresentado de maneiras diferentes JSON - Java Script Object Notation Um formato de dados para se utilizar em web
  • 60. Eduardo Mendes (edumendes@gmail.com)60 Este código trabalha com HTML formatado $(document).ready(function () { $('form').on('submit', function(event) { var form = $(this); event.preventDefault(); $.ajax('pedidos.html', { type: 'POST', data: form.serialize(), success: function(result) { form.remove(); $('#pedido').hide().html(result).fadeIn(); } }); }); });
  • 61. Eduardo Mendes (edumendes@gmail.com)61 Este código trabalha com HTML formatado $('form').on('submit', function(event) { var form = $(this); event.preventDefault(); $.ajax('pedidos.html', { type: 'POST', data: form.serialize(), ! success: function(result) { form.remove(); $('#pedido').hide().html(result).fadeIn(); } ! }); }); dataType: 'json', , contentType: 'application/json' transforma a resposta em JSON o resultado não é HTML então é preciso criar um nó JSON solicita que a resposta seja no formato JSON
  • 62. Eduardo Mendes (edumendes@gmail.com)62 Este código trabalha com HTML formatado success: function(result) { form.remove(); ! ! ! ! ! ! } { "pedido": 86, "sanduiche": "Hambuguer", "quantidade": 4, "total": 20.00 } result <p>Pedido: 86. Sanduiche: Hamburguer. Quantidade: 4. Total: R$ 20.00</p> var texto = $("<p></p>"); texto.append("Pedido: “ + result.pedido + ". "); texto.append("Quantidade: “ + result.quantidade + “. "); texto.append("Sanduiche: “ + result.sanduiche + ". "); texto.append("Total: “ + result.total + ". "); Json vai ser convertido em um objeto JavaScript $('#pedido').hide().html(msg).fadeIn(); Cria e adiciona o nó DOM
  • 63. Eduardo Mendes (edumendes@gmail.com)63 Refatorando $.ajax('pedidos.html', {…}); <form action=“/pedidos.html” method=“post"> … </form> $.ajax(‘pedidos.html’).attr(‘action’), {…}); .attr(<atributo>); .attr(<atributo>, <valor>); métodos jQuery
  • 64. Eduardo Mendes (edumendes@gmail.com)64 Código finalizado $('form').on('submit', function (event) { var form = $(this); event.preventDefault(); $.ajax(form.attr('action'), { type: 'POST', dataType: 'json', data: form.serialize(), success: function (result) { form.remove(); var texto = $("<p></p>"); texto.append("Pedido: " + result.pedido + ". "); texto.append("Quantidade: " + result.quantidade + ". "); texto.append("Sanduiche: " + result.sanduiche + ". "); texto.append("Total: " + result.total + ". "); $('#pedido').hide().html(msg).fadeIn(); }, contentType: 'application/json' }); });
  • 66. Eduardo Mendes (edumendes@gmail.com)66 Ajax & JSON <h1>Bem-vindo ao jQuery Festas</h1> <button>Bebida em Destaque</button> ! <div class="destaque"> <h2>Destaque</h2> <img src=""/> <p></p> </div>
  • 67. Eduardo Mendes (edumendes@gmail.com)67 Ajax & JSON <h1>Bem-vindo ao jQuery Festas</h1> <button>Bebida em Destaque</button> ! <div class="destaque"> <h2>Destaque</h2> <img src=""/> <p></p> </div> $('button').on('click', function () { $.ajax('bebidas/favoritas/1', { contentType: 'application/json', dataType: 'json', success: function(result) { { "nome": "Lemon Breeze", "imagem": "imagens/yellow.gif" } var destaque = $('.destaque'); destaque.find('p').html( destaque.find('img') result.nome); .attr(‘src', result.imagem); } }); }); e se existissem múltiplos destaques?
  • 68. 68
  • 69. Eduardo Mendes (edumendes@gmail.com)69 JSON com vários resultados { "nome": "Lemon Breeze", "imagem": "imagens/yellow.gif" }, [ ! ! ! ! { "nome": "Dark Juice", "imagem": "imagens/black.gif" }, { "nome": "Chai Tea", "imagem": "imagens/chai.gif" } ] success: function(result) { var destaque = $('.destaque'); destaque.find('p').html(result.nome); destaque.find('img') .attr('src', result.imagem); } result application.js O resultado é um array de objetos precisa-se de um laço para cada destaque
  • 70. Eduardo Mendes (edumendes@gmail.com)70 $.each -> iteração sobre um array success: function(result) { var destaque = $(‘.destaque ); destaque.find(‘p').html( .nome); destaque.find('img') .attr('src', .imagem); } application.js <li class="destaque-0"> … </li> ! <li class="destaque-1"> … </li> ! <li class="destaque-2"> … </li> index.html $.each(colecao, function(<indice>, <objeto>) {}); Executa a função para cada objeto da coleção $.each(result, function(indice, bebida) { -' + indice bebida bebida
  • 71. Eduardo Mendes (edumendes@gmail.com) E quando a quantidade de informação for variável? 71
  • 72. Eduardo Mendes (edumendes@gmail.com)72 E quando a quantidade de informação for variável?
  • 73. Eduardo Mendes (edumendes@gmail.com)73 Transforme um array de objetos em HTML $('.atualizar-pedidos').on('click', function() { $.ajax('status/todos.json', { contentType: 'application/json', dataType: 'json', success: function (result) {...} }); }); [ { "numero": "50", "status": "Não iniciado" }, { "numero": "45", "status": "Entregue" }, { "numero": "47", "status": "Cancelado" } ! ] result $.getJSON(url, success); $.getJSON('status/todos.json', function(result) {}); o resultado será um array de objetos application.js
  • 74. Eduardo Mendes (edumendes@gmail.com)74 Transforme um array de objetos em HTML $('.atualizar-pedidos').on('click', function() { $.getJSON('status/todos.json', function(result) { ! ! }); }); [ { "numero": "50", "status": "Não iniciado" }, { "numero": "45", "status": "Entregue" }, { "numero": "47", "status": "Cancelado" } ! ] result <li> <h3>numero</h3> <p>status</p> </li> <li> <h3>…</h3> <p>…</p> </li> <li> <h3>…</h3> <p>…</p> </li> é precisso transformar para um formato HTML application.js var pedidos = ???? $('ul').html(pedidos);
  • 75. Eduardo Mendes (edumendes@gmail.com)75 Array com $.map() $.map(colecao, function(<item>, <indice>) {}); a coleção pode ser um array a ordem é diferente do each o método map um array modificado a partir do array passado com o parâmetro var numeros = [1,2,3,4] ! var numeros-novos = $.map(numeros, function(item, indice) { return item + 1 }); numeros [1, 2, 3, 4] numeros-novos [2, 3, 4, 5]
  • 76. Eduardo Mendes (edumendes@gmail.com)76 Do JSON para o HTML ! { "numero": "50", "status": "Não iniciado" }, { "numero": "45", "status": "Entregue" }, { "numero": "47", "status": "Cancelado" } [ ]$.map(result, function(pedido, indice) { var item-pedido = $(“<li></li>”); return item-pedido; }); [ ]<li></li> <li></li> <li></li>
  • 77. Eduardo Mendes (edumendes@gmail.com)77 Do JSON para o HTML ! { "numero": "50", "status": "Não iniciado" }, { "numero": "45", "status": "Entregue" }, { "numero": "47", "status": "Cancelado" } [ ]$.map(result, function(pedido, indice) { var item-pedido = $(“<li></li>”); ! ! return item-pedido; }); [ ] $(‘<h3> Pedido: ’ + pedido.numero + ‘</h3>’).appendTo(item-pedido); $(‘<p>’ + pedido.status + ‘</p>’).appendTo(item-pedido); <li> <h3>Pedido: 50</h3> <p>Não iniciado</p> </li> <li> <h3>Pedido: 45</h3> <p>Entregue</p> </li> <li> <h3>Pedido: 47</h3> <p>Cancelado</p> </li>
  • 78. Eduardo Mendes (edumendes@gmail.com)78 Do JSON para o HTML $.map(result, function (pedido, indice) { var item_de_pedidos = $('<li></li>'); $('<h2>Pedido: ' + pedido.numero + '</h2>').appendTo(item_de_pedidos); $('<p>' + pedido.status + '</p>').appendTo(item_de_pedidos); return item_de_pedidos; }); $('.atualizar-pedidos').on('click', function () { $.getJSON('status/todos.json', function (result) { var pedidos = retorna-se a lista alterada $('ul').html(pedidos); }); });
  • 79. Eduardo Mendes (edumendes@gmail.com) E quando a quantidade de informação for 79
  • 81. Eduardo Mendes (edumendes@gmail.com) Plugin 81 Uma nova funcionalidade que pode ser chamada a partir de uma seleção jQuery Pode ser reutilizada em outros projetos encapsulamento e reaproveitamento de código
  • 82. Eduardo Mendes (edumendes@gmail.com) a função $ $.(a).css(“color”, “yellow”); a coleção pode ser um array a ordem é diferente do each Quando se utiliza a função $, o valor retornado é um objeto jQuery $.(a).css(…) Este objeto contém todos os métodos jQuery que estamos utilizando $.(a).click(…) $.(a).addClass(…) Além de todas as propriedades associadas a eles
  • 83. Eduardo Mendes (edumendes@gmail.com) $.fn 83 Todos este métodos estão no objeto $.fn Novos métodos (plugins) também deverão ser adicionados a ele
  • 84. Eduardo Mendes (edumendes@gmail.com)84 Caminho simples para o plugin A forma mais simples é adicionar uma propriedade ao $.fn $.fn.umPlugin = function() { // lógica encapsulada }
  • 85. Eduardo Mendes (edumendes@gmail.com)85 Por partes $ apelido para o objeto jQuery window.jQuery = window.$ = jQuery então porque não utilizar:
  • 86. Eduardo Mendes (edumendes@gmail.com)86 Por partes var jQuery = function(selector, context) { return new jQuery.fn.init(selector, context, rootjQuery); } jQuery é uma função Objeto jQuery.fn = jQuery.prototype uma propriedade que todos os objetos herdam de Global
  • 87. Eduardo Mendes (edumendes@gmail.com) Função
 Construtora 87 function Carro(fabricante, modelo, ano) { this.fabricante = fabricante; this.modelo = modelo; this.ano = ano; } var outroCarro = new Carro("Hyundai", "Tucson", 2009);
  • 88. Eduardo Mendes (edumendes@gmail.com)88 function Carro(fabricante, modelo, ano) { this.fabricante = fabricante; this.modelo = modelo; this.ano = ano; } var outroCarro = new Carro("Hyundai", "Tucson", 2009); outroCarro.abs = true; var aqueleCarro = new Carro("Ford", "Fiesta", 2014);
  • 89. Eduardo Mendes (edumendes@gmail.com)89 function Carro(fabricante, modelo, ano) { this.fabricante = fabricante; this.modelo = modelo; this.ano = ano; } var outroCarro = new Carro("Hyundai", "Tucson", 2009); outroCarro.abs = true; var aqueleCarro = new Carro("Ford", "Fiesta", 2014); Carro.prototype.abs = true; a propriedade estará disponível em todas as infâncias do objeto
  • 90. Eduardo Mendes (edumendes@gmail.com)90 Um plugin simples “Amarelar" o que se quiser $.(a).css(“color”, “yellow”); $.fn.amarelar = function() { // lógica encapsulada }
  • 91. Eduardo Mendes (edumendes@gmail.com)91 Um plugin simples “Amarelar" o que se quiser $.fn.amarelar = function() { this.css(‘color’, ‘yellow’); } $(document).ready(function () { $('a').amarelar(); });
  • 92. Eduardo Mendes (edumendes@gmail.com)92 Encadeamento “Amarelar" o que se quiser $.fn.amarelar = function() { this.css(‘color’, ‘yellow’); return this; } $(document).ready(function () { $(‘a’).amarelar().fadeIn(); });
  • 93. Eduardo Mendes (edumendes@gmail.com) Para estar disponível em todas as instâncias 93 utilize $.fn
  • 94. Eduardo Mendes (edumendes@gmail.com) E se existirem outros plugins que utilizam parâmetros com mesmos nomes? 94 e quanto
 à $??
  • 95. Eduardo Mendes (edumendes@gmail.com)95 Protegendo o escopo Utilize Funções IIFE (Immediately-Invoked Function Expressions) padrão comum para evitar problemas de sombreamento de variáveis tudo que for declarado
 tem escopo somente nesse bloco (function() { var qualquer = “Hello”; })(); var carro = new Carro(); ! (function(c) { c.ligar(); })(carro); (function($) { … })(jQuery); modo jQuery
  • 96. Eduardo Mendes (edumendes@gmail.com)96 Um plugin com IIFE “Amarelar" o que se quiser $.fn.amarelar = function() { this.css(‘color’, ‘yellow’); } $(document).ready(function () { $('a').amarelar(); });
  • 97. Eduardo Mendes (edumendes@gmail.com)97 Um plugin com IIFE “Amarelar" o que se quiser (function($) { $.fn.amarelar = function() { this.css(‘color’, ‘yellow’); } })(jQuery); $(document).ready(function () { $('a').amarelar(); });
  • 99. Eduardo Mendes (edumendes@gmail.com)99 index.html <ul class="bebidas"> <li class="bebida" data-preco="15.00"> <p> <img src="imagens/yellow.gif"/> </p> <h3>Lemon Breeze</h3> <button>Consultar Preco</button> </li> <li class="bebida" data-preco="20.00"> … </li> <li class="bebida" data-preco="17.00"> … </li> $('.bebida').precificar();
  • 100. Eduardo Mendes (edumendes@gmail.com)100 Criando um plugin $.fn.precificar = function() { console.log('Chamando preficicar'); console.log(this); } Disponibiliza o método como uma função jQuery o this será o objeto jQuery onde o plugin foi chamado $('.bebida').precificar();
  • 101. Eduardo Mendes (edumendes@gmail.com)101 Criando um plugin e adicionando comportamento $.fn.precificar = function() { var bebida = this; bebida.on('click', 'button', function() { var preco = bebida.data('preco'); var detalhes = $('<p>Preco: ' + preco + '</p>'); $(this).hide(); bebida.append(detalhes); }); }; $(document).ready(function () { $('.bebida').precificar(); });
  • 103. Eduardo Mendes (edumendes@gmail.com)103 Corrigindo o comportamento $.fn.precificar = function() { console.log('Chamando preficicar'); console.log(this); } this.each()…
  • 104. Eduardo Mendes (edumendes@gmail.com)104 Criando um plugin e adicionando comportamento $.fn.precificar = function() { var bebida = this; bebida.on('click', 'button', function() { var preco = bebida.data('preco'); var detalhes = $('<p>Preco: ' + preco + '</p>'); $(this).hide(); bebida.append(detalhes); }); };
  • 105. Eduardo Mendes (edumendes@gmail.com)105 Criando um plugin e adicionando comportamento $.fn.precificar = function() { ! var bebida = this; bebida.on('click', 'button', function() { var preco = bebida.data('preco'); var detalhes = $('<p>Preco: ' + preco + '</p>'); $(this).hide(); bebida.append(detalhes); }); ! }; this.each(function () { });
  • 106. Eduardo Mendes (edumendes@gmail.com)106 Plugins com parâmetros $(document).ready(function () { $('.bebida').precificar({ dias:5 }); }); $.fn.precificar = function(opcoes) { … var preco = bebida.data('preco'); var detalhes = $(‘<p>Preco:' + opcoes.dias + ' drinks por ‘ + opcoes.dias * preco + '</p>'); e se fosse necessário parâmetros com valores default?
  • 107. Eduardo Mendes (edumendes@gmail.com)107 Parâmetros opcionais $(document).ready(function () { $('.bebida').precificar({ dias:5 }); }); $(document).ready(function () { $(‘.bebida').precificar(); }); com ou sem parâmetros $.fn.precificar = function(opcoes) { …
  • 108. Eduardo Mendes (edumendes@gmail.com)108 Parâmetros opcionais com $.extend Combina os objetos $.extend(target[, objeto1, objeton]); $.extend({ dias: 3 }, { preco: 5 }); { dias: 3, preco: 5 } $.extend({ dias: 3 }, {}); { dias: 3 } $.extend({ dias: 3 }, { dias: 5 }); { dias: 3 } a forma de configurar um valor default
  • 109. Eduardo Mendes (edumendes@gmail.com)109 Adicionando o parâmetro opcional $.fn.precificar = function (opcoes) { this.each(function () { var bebida = $(this); console.log(bebida); bebida.on('click.precificar', 'button', function () { var preco = bebida.data('preco'); … }); }); };
  • 110. Eduardo Mendes (edumendes@gmail.com)110 Adicionando o parâmetro opcional $.fn.precificar = function (opcoes) { this.each(function () { var bebida = $(this); console.log(bebida); bebida.on('click.precificar', 'button', function () { var preco = bebida.data('preco'); … }); }); }; var configuracoes = $.extend({dias: 3}, opcoes);
  • 111. Eduardo Mendes (edumendes@gmail.com)111 Adicionando o parâmetro opcional $.fn.precificar = function (opcoes) { this.each(function () { var bebida = $(this); var configuracoes = $.extend({dias: 3}, opcoes); bebida.on('click.precificar', 'button', function () { var preco = bebida.data('preco'); var detalhes = $('<p>Preco:' + configuracoes.dias + ' drinks por ' + configuracoes.dias * preco + '</p>'); $(this).hide(); bebida.append(detalhes); }); }); };
  • 113. Eduardo Mendes (edumendes@gmail.com)113 Adicionando o parâmetro opcional $.fn.precificar = function (opcoes) { this.each(function () { var bebida = $(this); var config = $.extend({dias: 3}, opcoes); bebida.on('click.precificar', 'button', function () { var preco = bebida.data('preco'); var detalhes = $('<p>Preco:' + config.dias + ' drinks por ' + config.dias * preco + '</p>'); $(this).hide(); bebida.append(detalhes); }); }); };
  • 114. Eduardo Mendes (edumendes@gmail.com)114 Adicionando o parâmetro opcional $.fn.precificar = function (opcoes) { this.each(function () { ! var config = $.extend({ dias: 3, bebida: $(this), preco: $(this).data(‘preco') botao: $(this).find(‘button') }, opcoes); config.bebida.on('click.precificar', 'button', function () { var detalhes = $('<p>Preco:' + config.dias + ' drinks por ' + config.dias * config.preco + '</p>'); config.botao.hide(); config.bebida.append(detalhes); }); }); }; config.dias config.bebida config.preco config.botao