Evento de incêndio sempre que um item DropDownList é selecionado com jQuery

Eu tenho um menu suspenso:

no meu jQuery, eu atribuo evento de mudança como este:

 $('#dropdownid').change(function() {......}); 

Agora, isso funciona quando seleciono um valor diferente na lista suspensa, mas digamos que eu queira selecionar o mesmo valor novamente. (porque eu quero fazer outra chamada com o mesmo valor) Então, quando eu selecioná-lo novamente, (sem alterar o valor) apenas clicando no valor selecionado na lista suspensa e “selecionando” novamente, nenhum evento é acionado. Existe outro evento no jquery que eu tenho que atribuir a ele? qual é a solução?

Para expandir a sugestão de Vincent Ramdhanie , dê uma olhada em algo como isto. Essencialmente, você acaba com sua própria function jQuery que pode ser reutilizada em outro lugar.

Etapa 1 : criar a function jQuery

 (function($) { $.fn.selected = function(fn) { return this.each(function() { var clicknum = 0; $(this).click(function() { clicknum++; if (clicknum == 2) { clicknum = 0; fn(this); } }); }); } })(jQuery); 

Etapa 2 : verifique se o arquivo da function jQuery recém-criado é referenciado para uso:

  

Etapa 3 : utilize uma nova function:

 $('#MyDropDown').selected(function() { //Do Whatever... }); 

INFO ORIGINAL
Com sua base de código atual, selecionando o mesmo valor do asp: DropDownList não irá acionar o evento de alteração.

Você poderia tentar adicionar outra function jQuery para o evento .blur. Isso seria acionado quando o controle perdesse o foco:

 $('#dropdownid').blur(function() {......}); 

Se a function de desfoque não funcionar para você, adicionarei um botão de atualização ou algo semelhante àquele efeito que triggers a function que você está tentando utilizar.

Tente isto:

 $(document).ready(function(){ var clicknum = 0; $("#dropdownid").click(function(){ clicknum++; if(clicknum == 2){ alert($(this).val()); clicknum = 0; } }); }); 

Primeiro você está criando um clicknum variável para rastrear o número de cliques, porque você não quer que o evento seja acionado toda vez que o usuário clicar na checkbox suspensa. O segundo clique é a seleção que o usuário faz.

Se click num for 2, então este é um segundo clique, então ative o evento e redefina o clicknum para 0 na próxima vez. Caso contrário, não faça nada.

Basta conectar os manipuladores de events aos controles de opção incluídos, em vez de selecionar:

 $('#dropdownid option').click(function() {......}); 

Isso só será acionado quando você selecionar uma opção na lista suspensa, independentemente de ela mudar.

De acordo com a API :

O evento de alteração é acionado quando um controle perde o foco de input e seu valor é modificado desde o foco.

Você pode querer experimentar o mousedown ou clicar em events como alternativa.

Muitas das soluções atuais irão quebrar em muitas situações. Qualquer solução que dependa da verificação da contagem de cliques duas vezes será muito inconstante.

Alguns cenários a considerar:

  • Se você clicar em, em seguida, em off, em seguida, novamente, contará cliques e fogo.
  • No firefox, você pode abrir o menu com um único clique do mouse e arrastar para a opção escolhida sem levantar o mouse.
  • Se você usar qualquer combinação de toques de teclado, provavelmente ficará com o contador de cliques fora de sincronia ou perderá completamente o evento de alteração.
    • Você pode abrir o menu suspenso com Alt + (ou a barra de espaço no Chrome e no Opera).
    • Quando a lista suspensa estiver em foco, qualquer uma das teclas de seta mudará a seleção
    • Quando o menu suspenso estiver aberto, clicar em Tab ou Enter fará uma seleção

Aqui está uma extensão mais abrangente:

A maneira mais robusta de ver se uma opção foi selecionada é usar o evento change , que você pode manipular com o manipulador .change() do jQuery.

A única coisa que resta a fazer é determinar se o elemento original foi selecionado novamente.
Isto foi perguntado muito ( um , dois , três ) sem uma grande resposta em qualquer situação.

A coisa mais simples a fazer seria verificar se havia um evento click ou keyup na option:selected elemento option:selected , MAS Chrome, IE e Safari não parecem suportar events em elementos de option , mesmo que estejam no w3c recomendação

Dentro do elemento Select parece ser uma checkbox preta. Se você ouvir os events, você não pode nem saber em qual elemento o evento ocorreu ou se a lista estava aberta ou não.

A próxima melhor coisa, então, parece lidar com o evento blur . Isso indicará que o usuário se concentrou na lista suspensa (talvez tenha visto a lista, talvez não) e tomou a decisão de que gostaria de manter o valor original. Para continuar lidando com alterações imediatamente, ainda vamos nos inscrever no evento de change . E para garantir que não contemos duas vezes, definiremos um sinalizador se o evento de alteração foi gerado para que não seja acionado novamente duas vezes:

Código:

 (function ($) { $.fn.selected = function (fn) { return this.each(function () { $(this).focus(function () { this.dataChanged = false; }).change(function () { this.dataChanged = true; fn(this); }).blur(function (e) { if (!this.dataChanged) { fn(this); } }); }); }; })(jQuery); 

Então ligue assim:

 $("#dropdownid").selected(function (e) { alert('You selected ' + $(e).val()); }); 

Exemplo atualizado no jsFiddle

Confira esta solução:
http://ledomoon.blogspot.com/2009/12/dropdown-selected-change-event-by.html

 $(document).ready(function () { // select all the divs and make it invisible $("div.Content").css("display", "none"); // Find all the combos inside the table or gridview $("#tblItems").find("select.Status").each(function () { // Attached function to the change event of each combo $(this).change(function () { if ($(this).val() == "test1") { // Change the visibility of the next div after the selected combo if the selected value = test1 $(this).parent().find("div.Content").fadeIn("slow"); //css("display","block"); } else { $(this).parent().find("div.Content").fadeOut("slow"); //.css("display","none"); } }); }); }); 

Espero que isto ajude

Esse problema que você está tendo é devido ao tratamento do cliente do HTML de seleção base. Como a maioria dos clientes não vai sinalizar uma alteração não, você terá que tentar algo diferente.

Eu provavelmente adicionaria um botão “refresh” ou algo assim, mas eu sou um desenvolvedor e não um designer, então provavelmente estou errado. 🙂

O item selecionado de uma lista suspensa está lá para refletir uma escolha já feita.

Minha sugestão é redefinir o menu suspenso para um valor padrão como “Selecionar …”, toda vez que uma ação necessária for concluída. Portanto, se o usuário precisar executar a Ação A duas vezes, a lista suspensa será redefinida após cada ação.

  1. O usuário seleciona a Ação A no menu suspenso.
  2. A ação A é executada e a lista suspensa é redefinida.
  3. O usuário seleciona a Ação A no menu suspenso.
  4. A ação A é executada e a lista suspensa é redefinida.

Espero que isto ajude,

Rico

Para mim, a seguinte solução funcionou bem:

 $("#dropdownid select").click(function() { alert($("#dropdownid select option:selected").html()); }); 

Além disso:

 $('#dropdownid select option').click(function() { .... }