Recebendo o valor selecionado na caixa drop-down em um formulário html sem apresentar
-
05-07-2019 - |
Pergunta
Como obter o texto do item selecionado a partir de um drop down elemento de caixa em formulários HTML? (Usando python) Como posso armazenar o valor a uma variável, quando eu selecionar um item da caixa suspensa usando mouse? (Ie. Sem o uso de um botão de envio)
Esta é uma aplicação que eu estou fazendo no app engine que só suporta Python.
Solução
Sua pergunta mostra alguns mal-entendidos sobre como aplicações web trabalho.
O usuário tem que digitar um endereço em um navegador para chegar ao aplicativo. Que envia uma solicitação para o servidor. O código do servidor (escrito em python) recebe este pedido e tem a oportunidade de enviar uma resposta. A resposta é um documento escrito geralmente em HTML . Algumas partes deste documento pode ser dinâmico, ou seja, gerado pelo código python. Outras partes do documento pode ser estático. O browser seguida, processa o documento na janela do usuário.
Depois disso, a única maneira única o seu código python pode saber sobre algo que acontece na janela do navegador, ou para executar qualquer parte do código python, é fazer com que o navegador enviar outra solicitação.
Isso pode acontecer em muitas situações, o ser comum mais:
- O usuário clica em um link para outra url, tornando navegador enviar outra solicitação para esta nova URL.
- O usuário clica no botão
submit
, tomada navegador enviar o formulário como um pedido para o endereço configurado no atributoaction
do formulário. - Alguns código na página real, geralmente escrito em ECMAscript (também conhecido como javascript ), faz um pedido sob o capô.
O último é o que você quer. Você deve escrever em javascript algum código para tornar o navegador enviar as informações escolhido no menu suspenso para o servidor. Dessa forma, o seu código de python no servidor pode fazer algo sobre isso.
A maneira mais simples de fazer isso é fazendo o evento onchange
do drop down que a apresentar:
<select name='myfield' onchange='this.form.submit()'>
<option .... >
...
</select>
</form>
Dessa forma, quando o usuário altera o valor no menu suspenso, o formulário será submetido como se o usuário clicou em enviar. código Python no servidor será executado. O navegador irá carregar a resposta.
Outra forma popular seria o uso de javascript XmlHTTPRequest DOM API para enviar o pedido. Dessa forma, você pode receber o valor em python e enviar uma resposta, que por sua vez serão recebidos pelo código javascript no navegador. Esse código pode alterar partes da página com base na resposta, sem mudar a página inteira. Esta técnica é chamada AJAX .
Se você pretende lotes de escrita de código javascript, eu sugiro fortemente usando uma biblioteca javascript, pelo menos para aliviar a dor de lidar com muitas versões do navegador. jQuery é a minha biblioteca de escolha.
Em outras palavras, o código escrito em execução de JavaScript no navegador negociações para o código escrito em python em execução no servidor.
Outras dicas
seu python código é executado no servidor (google appengine). formulário HTML é executado no cliente (no navegador). O cliente eo servidor se comunicam através de protocolo HTTP. O cliente envia solicitações , e as responde servidor com respostas . Você tem que enviar algo para o servidor, para deixar o seu código python saber sobre as ações do usuário.
No lado do cliente, você pode usar Javascript (considere usando a biblioteca jQuery). Provavelmente, você pode ir longe sem se comunicar com o servidor.
Se você tem para se comunicar com o servidor, mas não querem para recarregar a página, use o técnica AJAX . Neste caso, você tem que criar exibições especiais em sua aplicação python e iniciar os pedidos em Javascript.
Lembre-se, Javascript é para o lado do cliente, Python é para o lado do servidor.
Se você precisa enviar o valor selecionado para o seu servidor sem submeter, eu acho que a melhor (se não o único) aproach seria a utilização de alguns ajax.
Se você estiver usando jQuery, ter um olhar para é coisa ajax. e é Eventos modelo . Você primeiro tem que anexar eventos do suspenso para a função que você deseja executar. Assim, quando o usuário muda o menu suspenso, em seguida, o navegador irá abrir uma nova conexão nos bastidores. Portanto, a, você pode obter esse valor e salvá-lo no lado do servidor. Seria algo. assim:
$(document).ready(
$("#select_id").change(function() {
$(this).getJSON("/method", {"selectValue":$(this).val()}, function() {
alert("value received!");
});
});
);
Espero que ajude!
O problema com o uso onchange é que nem todos os usuários estão usando um mouse. Se você tem uma caixa de combinação e altere o valor com o teclado, você nunca seria capaz de ter passado o primeiro valor sem a submeter formulário.
~ Cyrix