Recebi uma tag select com algumas opções em formato HTML:
(os dados serão coletados e processados em PHP)
Teste:
<select name="Testing">
<option value="1"> One
<option value="2"> Two
<option value="3"> Three
</select>
É possível que uma opção carregue vários valores como quando um usuário seleciona "Um", então alguns outros valores relacionados a esta opção serão gravados no banco de dados.
Como devo projetar a select
tag de modo que cada uma das opções possa ter um valor como este:
<select name="Testing">
<option value="1" value="2010"> One
<option value="2" value="2122"> Two
<option value="3" value="0"> Three
</select>
Respostas:
Uma maneira de fazer isso, primeiro um array, depois um objeto:
Editado (3 anos após a resposta) para colocar ambos os valores no formato JSON (usando
JSON.stringify()
) devido a uma reclamação de que minha resposta à prova de conceito "poderia confundir um desenvolvedor iniciante".fonte
Eu estava realmente me perguntando isso hoje, e consegui usando a função explodir do php, assim:
Formulário HTML (em um arquivo denominado 'doublevalue.php':
Ação do PHP (em um arquivo denominado doublevalue_action.php)
Como você pode ver na primeira parte do código, estamos criando uma caixa de seleção HTML padrão, com 2 opções. Cada opção possui 1 valor, que possui um separador (neste caso, '|') para dividir os valores (neste caso, modelo e cor).
Na página de ação, estou explodindo os resultados em uma matriz e chamando cada um. Como você pode ver, eu os separei e rotulei para que você possa ver o efeito que isso está causando.
Espero que isso ajude alguém :)
fonte
é possível ter vários valores em uma opção de seleção, conforme mostrado abaixo.
você pode obter o valor selecionado no evento de mudança usando jquery como mostrado abaixo.
Você pode encontrar mais detalhes neste LINK
fonte
uma opção é colocar vários valores com vírgulas separadas
gostar
e no lado do servidor separe-os
fonte
Quando preciso fazer isso, eu crio os outros valores dados-valores e uso js para atribuí-los a uma entrada oculta
fonte
Se seu objetivo é gravar essas informações no banco de dados, por que você precisa ter um valor primário e valores 'relacionados' no
value
atributo? Por que não apenas enviar o valor primário para o banco de dados e deixar a natureza relacional do banco de dados cuidar do resto?Se você precisar ter vários valores em seus
OPTION
s, tente um delimitador que não seja muito comum:...
ou adicione um objeto literal (formato JSON):
...
Realmente depende do que você está tentando fazer.
fonte
coloque valores para cada opção como
no lado do servidor no caso de php, use funções como explode [array] = explode ([delimeter], [post value]);
o código acima retorna uma matriz com apenas os números e o ':' é removido
fonte
Eu fiz isso usando atributos de dados. É muito mais limpo do que outros métodos que tentam explodir, etc.
HTML
JS
fonte
E os atributos de dados html? Essa é a maneira mais fácil. Referência da w3school
No seu caso
fonte
Use um delimitador para separar os valores.
fonte
Em HTML
Para JS
OU PARA PHP
fonte
Parâmetros de tag duplicados não são permitidos em HTML. O que você poderia fazer, é
VALUE="1,2010"
. Mas você teria que analisar o valor no servidor.fonte
Em vez de armazenar as opções no lado do cliente, outra maneira de fazer isso é armazenar as opções como elementos de submatriz de uma matriz associativa / indexada no lado do servidor. Os valores da tag de seleção conteriam apenas as chaves usadas para cancelar a referência da submatriz.
Aqui está algum código de exemplo. Isso é escrito em PHP, pois o OP mencionou PHP, mas pode ser adaptado para qualquer linguagem do lado do servidor que você estiver usando:
PHP:
fonte
Isso pode ou não ser útil para outras pessoas, mas para meu caso de uso específico, eu só queria que parâmetros adicionais fossem passados de volta do formulário quando a opção fosse selecionada - esses parâmetros tinham os mesmos valores para todas as opções, então ... minha solução era incluir entradas ocultas no formulário com o select, como:
Talvez óbvio ... mais óbvio depois que você vê.
fonte
você pode usar vários atributos
fonte