Eu tenho uma caixa de diálogo jQuery UI com um formulário. Gostaria de simular um clique em um dos botões da caixa de diálogo para que você não precise usar o mouse ou a guia sobre ele. Em outras palavras, eu quero que ele aja como uma caixa de diálogo GUI comum, onde simule apertar o botão "OK".
Suponho que essa possa ser uma opção simples na caixa de diálogo, mas não a encontro na documentação da interface do usuário do jQuery . Eu poderia vincular cada entrada de formulário com keyup (), mas não sabia se havia uma maneira mais simples / limpa. Obrigado.
Respostas:
Não sei se existe uma opção no widget da interface do usuário do jQuery , mas você pode simplesmente vincular o
keypress
evento à div que contém sua caixa de diálogo ...Isso funcionará independentemente do elemento em foco na sua caixa de diálogo, o que pode ou não ser uma coisa boa, dependendo do que você deseja.
Se você deseja tornar isso a funcionalidade padrão, você pode adicionar este trecho de código:
Aqui está uma visão mais detalhada de como seria:
fonte
Eu resumi as respostas acima e adicionei coisas importantes
Vantagens:
textarea
,select
,button
ou entradas com botão tipo, imagine usuário clicar entrar emtextarea
e obter o formulário apresentado em vez de começar nova linha!$(document).ready
document
e não vinculará o manipulador a cada caixa de diálogo, como em algum código acima, para maior eficiência$('<div><input type="text"/></div>').dialog({buttons: .});
:first
Desvantagens:
eq()
ou chamar uma função dentro da instrução if'.ui-dialog'
Sei que a pergunta é antiga, mas tive a mesma necessidade, então compartilhei a solução que usei.
fonte
.delegate()
foi descontinuada no jQuery 3.0, portanto.on()
(disponível desde 1.7) é provavelmente o caminho a seguir neste momento.Funciona perfeitamente com a versão mais recente da JQuery UI (1.8.1). Você também pode usar: first em vez de: last dependendo do botão que deseja definir como padrão.
Essa solução, comparada à selecionada acima, tem a vantagem de mostrar qual botão é o padrão para o usuário. O usuário também pode pressionar TAB entre os botões e pressionar ENTER para clicar no botão atualmente em foco.
Felicidades.
fonte
Uma maneira grosseira, mas eficaz, de fazer isso funcionar de maneira mais genérica:
Então, quando você cria uma nova caixa de diálogo, pode fazer o seguinte:
E use-o como um diálogo jquery normal depois:
Existem maneiras de melhorar isso e fazê-lo funcionar em casos mais especiais. Com o código acima, ele escolherá automaticamente o primeiro botão na caixa de diálogo como o botão a ser acionado quando pressionar Enter. Também pressupõe que existe apenas uma caixa de diálogo ativa a qualquer momento, o que pode não ser o caso. Mas você entendeu.
Nota: Como mencionado acima, o botão pressionado enter depende da sua configuração. Portanto, em alguns casos você deseja usar o seletor: first no método .find e em outros você pode usar o seletor: last.
fonte
Em vez de escutar códigos-chave como nesta resposta (que eu não consegui trabalhar), você pode vincular ao evento de envio do formulário na caixa de diálogo e, em seguida, fazer o seguinte:
Então, a coisa toda ficaria assim
Observe que navegadores diferentes manipulam a tecla enter de maneira diferente e alguns nem sempre enviam ao entrar.
fonte
O de Ben Clayton é o mais bonito e o mais curto, e pode ser colocado no topo da sua página de índice antes que qualquer caixa de diálogo jquery seja inicializada. No entanto, gostaria de salientar que ".live" foi descontinuado. A ação preferida agora é ".on". Se você deseja que ".on" funcione como ".live", será necessário usar eventos delegados para anexar o manipulador de eventos. Além disso, algumas outras coisas ...
Prefiro usar o método ui.keycode.ENTER para testar a tecla enter, pois você não precisa se lembrar do código da chave real.
Usar "$ ('.ii-dialog-buttonpane button: first', $ (this))" para o seletor de clique torna todo o método genérico.
Você deseja adicionar "return false"; para impedir o padrão e parar a propagação.
Nesse caso...
fonte
Eu não sei mais simples, mas normalmente você acompanharia qual botão tem o foco atual. Se o foco for alterado para um controle diferente, o "foco do botão" permanecerá no botão que teve o foco por último. Normalmente, o "foco do botão" inicia no botão padrão. Tabular para um botão diferente alteraria o "foco do botão". Você teria que decidir se navegar para um elemento de formulário diferente redefiniria o "foco do botão" para o botão padrão novamente. Você provavelmente também precisará de algum indicador visual diferente do padrão do navegador para indicar o botão de foco, pois ele perde o foco real na janela.
Depois que a lógica de foco do botão for desativada e implementada, provavelmente adicionaria um manipulador de chaves à própria caixa de diálogo e chamaria a ação associada ao botão "focado" atualmente.
EDITAR : Estou assumindo que você deseja poder pressionar enter a qualquer momento que estiver preenchendo elementos do formulário e que a ação do botão "atual" tenha precedência. Se você deseja esse comportamento apenas quando o botão está realmente focado, minha resposta é muito complicada.
fonte
Encontrei esta solução, funciona no IE8, Chrome 23.0 e Firefox 16.0
É baseado no comentário de Robert Schmidt.
Espero que ajude alguém.
fonte
Às vezes esquecemos o fundamental do que o navegador já suporta:
Isso fará com que a ENTERchave envie o formulário.
fonte
Eu fiz assim ...;) Espero que seja útil para alguém ..
fonte
Isso deve funcionar para acionar o clique do manipulador de cliques do botão. este exemplo assume que você já configurou o formulário na caixa de diálogo para usar o plug-in jquery.validate. mas pode ser facilmente adaptado.
fonte
Sei que já existem muitas respostas, mas reconheço naturalmente que minha solução é a mais limpa e possivelmente a mais curta. Tem a vantagem de funcionar em qualquer caixa de diálogo criada a qualquer momento no futuro.
fonte
Aqui está o que eu fiz:
Nesse caso, o myForm é um objeto jQuery que contém o html do formulário (observe, não há tags "form" lá ... se você colocar as na tela inteira será atualizada quando você pressionar "enter").
Sempre que o usuário pressionar "enter" no formulário, será o equivalente a clicar no botão "ok".
Isso também evita que o formulário seja aberto com o botão "ok" já destacado. Embora isso seja bom para formulários sem campos, se você precisar que o usuário preencha itens, provavelmente desejará que o primeiro campo seja destacado.
fonte
feito e feito
fonte
se você conhece o seletor de elemento de botão:
Deve fazer o truque para você. Isso focalizará o botão ok, e digite 'clique' nele, como seria de esperar. Essa é a mesma técnica usada nas caixas de diálogo nativas da interface do usuário.
fonte
fonte
Encontrei uma solução bastante simples para esse problema:
fonte
Isso funcionou muito bem para mim ..
fonte
Nenhuma dessas soluções parecia funcionar para mim no IE9. Eu acabei com isso ..
fonte
Abaixo do corpo é usado porque a caixa de diálogo DIV foi adicionada ao corpo, então o corpo agora ouve o evento do teclado. Ele testou no IE8,9,10, Mojila, Chrome.
fonte
Porque não tenho reputação suficiente para postar comentários.
Resposta modificada por Basemm # 35 também adicione Escape para fechar a caixa de diálogo.
fonte
Funciona bem Obrigado !!!
open: function () { debugger; $("#dialogDiv").keypress(function (e) { if (e.keyCode == 13) { $(this).parent().find("#btnLoginSubmit").trigger("click"); } }); },
fonte
Dê aulas aos seus botões e selecione-as da maneira usual:
fonte