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.

Foi útil?

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 atributo action 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top