Desativar click em uma Div

1,576 views
Skip to first unread message

Carlo

unread,
Feb 10, 2011, 9:26:30 PM2/10/11
to jQuery (Brasil)
Eu tenho duas divs que levam cliques .click(). Cada uma delas abre uma
nova div, e há um botão para fechar.

Mas gostaria que ao clicar na primeira div a segunda ficasse
desativada (e vice versa) até que a primeira seja fechada, liberando o
clique para a segunda.

Exemplo:

Div1
Div2

Abre1 (display: none)
Abre2 (display: none)

Ao clicar em: 'Div1' abrir 'Abre1' e desativar o clique na Div2, assim
que for fechado o 'Abre1' reativar o clique na 'Div2' e vice versa.

Não sei se expliquei direito, mas espero a ajuda de vocês, obrigado :D

Ciro Nunes

unread,
Feb 11, 2011, 6:28:56 AM2/11/11
to jque...@googlegroups.com
use o dialog da biblioteca jQuery UI com modal:true e seja feliz ;)




--
Krint
Ciro Alves Nunes
+55 31 9114-0872

Rafael Motta

unread,
Feb 11, 2011, 6:36:20 AM2/11/11
to jQuery (Brasil)
se eu entendi bem, use as funções bind e unbind

Franklin Anderson de Oliveira Souza

unread,
Feb 11, 2011, 6:45:58 AM2/11/11
to jque...@googlegroups.com
Bem, pelo que entendi o fato de a div adquirir a propriedade "display:
none" automaticamente se torna "não clicavel" porque simplesmente esta
escondida. Outra forma mais elegante é voce trabalhar com unbind(),
que retira eventos vinculados a uma tag no caso a div.

2011/2/11 Ciro Nunes <ciroa...@gmail.com>:

--
foobar

Carlo

unread,
Feb 11, 2011, 1:28:18 PM2/11/11
to jQuery (Brasil)
Veja como estou fazendo:

http://jsbin.com/unova4

Ao abrir a div: bairro, estou dando unbind nas otras divs.

Só que depois de clicar em salvar não sei como fazer para reativar os
clicks nas divs de estado e cidade.

On 11 fev, 09:45, Franklin Anderson de Oliveira Souza
<frankli...@gmail.com> wrote:
> Bem, pelo que entendi o fato de a div adquirir a propriedade "display:
> none" automaticamente se torna "não clicavel" porque simplesmente esta
> escondida. Outra forma mais elegante é voce trabalhar com unbind(),
> que retira eventos vinculados a uma tag no caso a div.
>
> 2011/2/11 Ciro Nunes <ciroanu...@gmail.com>:
>
>
>
> > use o dialog da biblioteca jQuery UI com modal:true e seja feliz ;)
>

Leonardo Koslowski

unread,
Feb 11, 2011, 2:19:24 PM2/11/11
to jque...@googlegroups.com
Ao invés de dar um unbind faça uma verificação no click desses elementos. Ex: ao clicar no div de cidade tu verifica se o estado ja foi escolhido, se nao for tu nao abre nada.

2011/2/11 Carlo <carlo...@gmail.com>

Carlo

unread,
Feb 11, 2011, 2:27:10 PM2/11/11
to jQuery (Brasil)
Mas eu também preciso que seja desativado o clique quando qualquer um
deles esteja aberto, para que não se sobreponham. Por isso estou
fazendo o unbind, independente da ordem Estado, Cidade e Bairro, ao
abrir o ultimo, o primeiro não poderá ser aberto até que a pessoa
salve o que selecionou.

Mas irei fazer essa sua verificação também. Obrigado pela dica.

On 11 fev, 17:19, Leonardo Koslowski <leo...@gmail.com> wrote:
> Ao invés de dar um unbind faça uma verificação no click desses elementos.
> Ex: ao clicar no div de cidade tu verifica se o estado ja foi escolhido, se
> nao for tu nao abre nada.
>
> 2011/2/11 Carlo <carlo.a...@gmail.com>

Abraão Alves

unread,
Feb 11, 2011, 6:43:12 PM2/11/11
to jque...@googlegroups.com

Cara é impressão minha ou você deu o mesmo id: ("form-select", "abrir", "fundo") pra mais de uma Div ?
Isso não pode acontecer jamais: http://www.w3schools.com/tags/att_standard_id.asp


Cuidado com esse detalhes.

Carlo

unread,
Feb 12, 2011, 10:41:39 AM2/12/11
to jQuery (Brasil)
Essa verificação é interessante, mas não é exatamente o que eu
preciso. Vou usa-la.

De nada adianta essa verificação se a pessoa já estiver no ultimo
campo: Bairro e clicar no campo Estado. Irão se sobrepor, por isso
preciso desativar os outros campos.

On 11 fev, 17:19, Leonardo Koslowski <leo...@gmail.com> wrote:
> Ao invés de dar um unbind faça uma verificação no click desses elementos.
> Ex: ao clicar no div de cidade tu verifica se o estado ja foi escolhido, se
> nao for tu nao abre nada.
>
> 2011/2/11 Carlo <carlo.a...@gmail.com>

Carlo

unread,
Feb 12, 2011, 1:42:22 PM2/12/11
to jQuery (Brasil)
Desculpe, mas acredito que não tenha lido a postagem inicial que se
refere a desativar e ativar o clique nas divs.

Não estou preocupado com a repetição dos nomes das divs, pelo
contrário, isso muito me ajuda.

De qualquer forma obrigado.

On Feb 11, 9:43 pm, Abraão Alves <abraao.teodo...@gmail.com> wrote:
> Cara é impressão minha ou você deu o mesmo id: ("form-select", "abrir",
> "fundo") pra mais de uma Div ?
> Isso não pode acontecer jamais:http://www.w3schools.com/tags/att_standard_id.asp
>
> Cuidado com esse detalhes.
>
> Em 11 de fevereiro de 2011 16:19, Leonardo Koslowski <leo...@gmail.com>escreveu:
>
>
>
>
>
>
>
> > Ao invés de dar um unbind faça uma verificação no click desses elementos.
> > Ex: ao clicar no div de cidade tu verifica se o estado ja foi escolhido, se
> > nao for tu nao abre nada.
>
> > 2011/2/11 Carlo <carlo.a...@gmail.com>

Oseias Ferreira

unread,
Feb 12, 2011, 2:25:59 PM2/12/11
to jque...@googlegroups.com

Em 12/02/2011, às 18:42, Carlo escreveu:

> Desculpe, mas acredito que não tenha lido a postagem inicial que se
> refere a desativar e ativar o clique nas divs.
>
> Não estou preocupado com a repetição dos nomes das divs, pelo
> contrário, isso muito me ajuda.

Como assim? Id não repete. O que pode repetir são as classes…
Como é que repetição dos nomes das divs muito te ajuda?

Voltando ao seu tópico, não consegui entender direito o que você quer
fazer…
Mas vendo seu código, vi que você só faz unbind.
Quando você faz isto, você retira os "vínculos" dos clicks na sua div.
Mas como você pretende fazer a div ser clicável novamente sem um bind?
Aqui seu eu abro o alguma div não consigo fazer mais nada…
Creio que você terá que fazer um bind e fechar a div, no momento do
click.

Outra coisa que não entendi é o porque do laço each.

--
Oséias Ferreira.

Carlo

unread,
Feb 12, 2011, 2:55:06 PM2/12/11
to jQuery (Brasil)
O que eu preciso é que o click seja reativado assim que a pessoa
clicar em salvar, APENAS isso :)

Preciso reativar o click abaixo da linha que esconde a div:

$('.abrir-'+class1).hide();

Oseias Ferreira

unread,
Feb 12, 2011, 5:14:54 PM2/12/11
to jque...@googlegroups.com

Em 12/02/2011, às 19:55, Carlo escreveu:

> O que eu preciso é que o click seja reativado assim que a pessoa
> clicar em salvar, APENAS isso :)
>
> Preciso reativar o click abaixo da linha que esconde a div:
>
> $('.abrir-'+class1).hide();

E onde está esta coisa que salva aqui http://jsbin.com/unova4 ?

--
Oséias Ferreira.

Carlo

unread,
Feb 12, 2011, 6:21:47 PM2/12/11
to jQuery (Brasil)
$('.abrir-'+class1+' #salvar').click(function(){
if($('input[name=bairro]:checked').get() == ''){
alert('Escolha pelo menos um bairro!');
} else {
$('.abrir-'+class1).hide();
$('#texto.'+class1).html('');
$('#texto.'+class1).append(
$('input[name='+class1+']:checked + label').map(function() {
return $(this).text();
}).get().join(", ")
);
}
});

Verfica se há algum checkbox selecionado, caso não tenha retorna erro
pedindo para selecionar.

Esconde a div #abrir, zera o conteudo do #texto para receber os campos
checkbox selecionados. Falta reativar aí o click.

Oseias Ferreira

unread,
Feb 12, 2011, 8:44:06 PM2/12/11
to jque...@googlegroups.com

Em 12/02/2011, às 23:21, Carlo escreveu:

> $('.abrir-'+class1+' #salvar').click(function(){
> if($('input[name=bairro]:checked').get() == ''){
> alert('Escolha pelo menos um bairro!');
> } else {
> $('.abrir-'+class1).hide();
> $('#texto.'+class1).html('');
> $('#texto.'+class1).append(
> $('input[name='+class1+']:checked + label').map(function() {
> return $(this).text();
> }).get().join(", ")
> );
> }
> });
>
> Verfica se há algum checkbox selecionado, caso não tenha retorna erro
> pedindo para selecionar.
>
> Esconde a div #abrir, zera o conteudo do #texto para receber os campos
> checkbox selecionados. Falta reativar aí o click.

Só agora que eu vi que somente o bairro está funcional.
Basicamente o bind funciona assim:

http://jsbin.com/unova4/3/edit

Mas creio que você precisará desenvolver melhor este seu código que
está um pouco complicado…

Mais informações http://api.jquery.com/bind/

--
Oséias Ferreira.

Carol

unread,
Feb 12, 2011, 7:10:58 PM2/12/11
to jque...@googlegroups.com
Tenta isso:
$('.abrir-'+class1+' #salvar').removeAttr('click');


 
>
> --
> Oséias Ferreira.

Carlo

unread,
Feb 14, 2011, 1:02:18 AM2/14/11
to jQuery (Brasil)
Carol, não funcionou, e nem sei se removeAttr retira cliques, mas
enfim...

Dei uma alterada no código pra ficar um poco mais fácil do pessoal
entender, aqui está:

http://jsfiddle.net/upbRG/1/

Ainda preciso fazer o clique voltar a funcionar, já que dei unbind
nele. Se retirarem a linha que faz o .unbind, irão ver que ao clicar
por exemplo em: Estado e em Bairro sem salva-los eles irão se
sobrepor. Por isso quero fazer o click voltar a funcionar.

Obrigado pela ajuda pessoal.

On 12 fev, 21:10, Carol <carolinagaribaldiguar...@gmail.com> wrote:
> Tenta isso:
> $('.abrir-'+class1+' #salvar').removeAttr('click');
>
> > USE O JSBIN.COM <http://jsbin.com/> / JSFIDDLE.NET <http://jsfiddle.net/> PARA CÓDIGOS.

Mateus Souza

unread,
Feb 14, 2011, 6:54:54 AM2/14/11
to jque...@googlegroups.com
Aqui velho, isso é muito simples: http://jsfiddle.net/upbRG/3/

Tu ta precisando melhorar esses código teu ein, tem muita coisa "lixo" aqui... e ID se uma uma vez só :)
Enfim, aprende a refatorar JS, HTML... que está precisando, e eu falo isso pro teu próprio bem! Dá umas googlada ai e corre atrás.


========================

Mateus Souza - Webdesigner Freelancer
@mateus_souzaweb
http://mateussouza.com

Neto Neto

unread,
Feb 14, 2011, 8:08:39 AM2/14/11
to jque...@googlegroups.com
Carol, não é:
$('.abrir-'+class1+' #salvar').removeAttr('click');
E sim:
$('.abrir-'+class1+' #salvar').removeAttr('onclick');

E acho que não remove um evento de bind, é melhor dar o bind e depois o unbind.

Neto - Web developer
+55 81 8169.4400 / http://jneto.net.br

Oseias Ferreira

unread,
Feb 14, 2011, 11:01:46 AM2/14/11
to jque...@googlegroups.com

Em 14/02/2011, às 06:02, Carlo escreveu:

> Carol, não funcionou, e nem sei se removeAttr retira cliques, mas
> enfim...
>
> Dei uma alterada no código pra ficar um poco mais fácil do pessoal
> entender, aqui está:
>
> http://jsfiddle.net/upbRG/1/
>
> Ainda preciso fazer o clique voltar a funcionar, já que dei unbind
> nele. Se retirarem a linha que faz o .unbind, irão ver que ao clicar
> por exemplo em: Estado e em Bairro sem salva-los eles irão se
> sobrepor. Por isso quero fazer o click voltar a funcionar.
>
> Obrigado pela ajuda pessoal.

Carlo.

Mas como disse na mensagem anterior não faz muito sentido seu código.
Por exemplo:


$(".form-select").each(function () {

var getClass = $(this).children('#texto').attr('class');

Você faz um laço e armazena nesta variável. O problema é que este each
será executado só quando você carrega a página.

Ao meu ver o laço é necessário se você for fazer um bind para cada um
destes elementos.
O problema é: Você está fazendo errado…

No mínimo deveria ser assim:
var getClass = $(this).children('.texto').attr('id');

Já que não faz sentido repetir id. E se não faz sentido repetir id,
para que serve o laço, se ele só vai passar uma vez…

Enquanto você insistir em fazer a coisa errada vai ficar muito difícil
te ajudar.

Vou tentar fazer o algoritmo para você.

1- Quando carrega a página você faz um laço e associa ao click com o
bind. É melhor você fazer isto numa função separada, fora do laço, e
fazer um call nela, para evitar ter que repetir trechos do mesmo código.
Esta função será a mesma que você usará quando o usuário clicar em
gravar.
Ou seja. Na prática existirão o mesmo número de funções será igual ao
número de elementos, uma vez que o bind faz é "criar" uma função em
tempo de execução.
O jeito certo de fazer isto é colocar todas as coisas que você precisa
associar na mesma classe. Cada uma destas deverá ter um id diferente.

2- Quando clica em alguma destes itens, e abre a div, você precisa
desabilitar estes binds, usando a função unbind. Um novo laço each com
unbind em tudo que você precisa desabilitar.

3- Quando o usuário termina de preencher o for e clica no gravar, você
deve novamente fazer outro each, com um call para a função que associa
novamente o click com o bind. Isto habilitará os cliques onde você
precisa.

--
Oséias Ferreira.

Reply all
Reply to author
Forward
0 new messages