eZ Brasil / Forum / Desenvolvimento e design / Não funciona do IE

Não funciona do IE

« Tópico anterior
|
Desenvolvimento e design
|
Próximo tópico »

Entre com seu usuário e senha ou registre-se no site para participar do forum.

Autor Mensagem
Virgilio Lemos
Gravatar

Quarta-Feira, 9 de Setembro de 2009, 21:39:48

Não funciona do IE

O código abaixo carrega automaticamente as opções de cidade para o estado selecionado, baseado na array.

Está funcionando ok para o Firefox, mas no IE a cidade selecionada fica em branco.

Alguém pode me dar uma dica do que pode causar isso ou sugerir outra forma de concatenar os resultados em ? Já verifiquei que o problema está na concatenação.

{literal}
<script language="JavaScript">
<!—Begin
cidade = new Array(
new Array(
new Array("",
new Array("Niteroi",
new Array("Rio de Janeiro",
new Array("Marica"
)
);
function fillSelectFromArray(selectCtrl, itemArray, goodPrompt, badPrompt, defaultItem) {
var i, j;
var prompt;
// empty existing items
for (i = selectCtrl.options.length; i >= 0; i--) {
selectCtrl.options[i] = null;
}
prompt = (itemArray != null) ? goodPrompt : badPrompt;
if (prompt == null) {
j = 0;
}
else {
selectCtrl.options[0] = new Option(prompt);
j = 1;
}
if (itemArray != null) {
// add new items
for (i = 0; i < itemArray.length; i++) {
selectCtrl.options[j] = new Option(itemArray[i][0]);
if (itemArray[i][1] != null) {
selectCtrl.options[j].value = itemArray[i][1];
}
j++;
}
// select first item (prompt) for sub list
selectCtrl.options[0].selected = true;
}
}
// End -->
</script>
{/literal}


<form name="Options" action={"/content/search"|ezurl}>
<select name=" Estado" id="search-selection-estado" onChange="fillSelectFromArray(this.form.Cidade, ((this.selectedIndex == -1) ? null : cidade[this.selectedIndex-1]));">
<option selected="selected" value="">
<option selected="selected" value= RJ> RJ
</select>
<select name=" Cidade" id="search-selection-cidade">
<option selected="selected">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
</select>
</form >


<input type="hidden" name="SearchText" id="search-text" value="{$SearchText}" />

<input id="searchbutton" class="button" type="submit" value="{'Search'|i18n('design/ezwebin/pagelayout')}" alt="{'Search'|i18n('design/ezwebin/pagelayout')}" onclick="var 
est = document.getElementById('search-selection-estado'), 
cid = document.getElementById('search-selection-cidade'), 
searchTxt = document.getElementById('search-text'); 
searchTxt.value = '+' + est.value + ' +' + cid.value;
" />
</form>
Gravatar
Virgilio Lemos

Quinta-Feira, 10 de Setembro de 2009, 23:54:34
Como disse antes, o problema está na concatenação as opções selecionadas que está sendo feita com o código:

searchTxt.value = '+' + est.value + ' +' + cid.value;


Alguem sabe de outra maneira para concatenar Estado + Cidade em SearchText?
Gravatar
Renan Leme

Sexta-Feira, 11 de Setembro de 2009, 13:16:16
Oi Virgilio,

Tenta isso:
searchTxt.value = '+' + est.options[est.selectedIndex].value + ' +' + cid.options[cid.selectedIndex].value;


Abs
Gravatar
Virgilio Lemos

Sexta-Feira, 11 de Setembro de 2009, 18:46:52
Renan,
Testei e não funcionou.
Você conhece alguma outra forma de se capturar o valor selecionado?
O input está enviando corretamente os três paramentros, isto é, passa os dois do select e mais o searchTxt, da seguinte forma:

/content/search?SearchText=+RJ&Estado=RJ&Cidade=Niteroi

Só que o SearchText, que deveria ser a concatenação de estado + cidade, só contém estado.
Já apliquei com outras seleções estáticas e todas funcionam ok. Só não funciona com seleção dinâmica.

Você consegue ver outra solução para este caso?

Grato,
Gravatar
Renan Leme

Domingo, 13 de Setembro de 2009, 20:00:33
Oi Virgilio,

Acho que o ideal seria você utilizar um depurador para o IE, ja fiz esse tipo de seleção dinamica com concatenação sem problemas, mas como sabemos que o IE nao é muito amigável, adiciona o firebug lite:
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>

Espero que ajude

Abs
Gravatar
Virgilio Lemos

Terça-Feira, 15 de Setembro de 2009, 0:00:16
Renan,
Testei com o firebug e ativei uma função onChange e mostrou que o .value do select no IE fica sempre "", não importando a seleção feita.
No firefox ele mostra corretamente .value mudando com a seleção efetuada.

Portanto, não é uma questão de método de concatenação e sim de como o IE lida com seleções dinâmicas.

Alguma idéia sobre o que causa isso?
Alguma outra sugestão?
Gravatar
Virgilio Lemos

Terça-Feira, 15 de Setembro de 2009, 1:27:26
Testei também nos browsers Google Crome e Epiphany e funcionaram ok.

O interessante é que, se deixo tudo num único form, todos os parâmetros são passados corretamente no submit, isto é, passa Estado, Cidade e SearchTxt.
Ex: /content/search?Estado=RJ&Cidade=Niteroi&SearchText=%2BRJ+

Por aí se conclui que o valor Niterói foi selecionado, mas não é encontrado pelo método getelementbyid para ser usado na concatenação que forma o SearchText, ficando este incompleto.
Gravatar
Renan Leme

Terça-Feira, 15 de Setembro de 2009, 10:42:19
Oi Virgilio,

Ajudaria se isso estivesse online para darmos uma olhada, por hora, creio que posso te dizer um pouco da minha experiencia com esse problema:

O campo de formulário select no IE deve estar com o value do option preenchido, ou seja, o javascript que seta dinamicamente as opções, deve colocar corretamente o value no option, caso contrario não funciona a captura no IE.

Tente inspecionar o elemento utilizando o web developer toolbar para o IE

http://www.microsoft.com/download...BB3E-2D5E1DB91038&displaylang=en

Abs
Gravatar
Virgilio Lemos

Terça-Feira, 15 de Setembro de 2009, 14:47:22
Renan,
Você acertou em cheio.
O formato do array que eu estava usando não continha o value a ser carregado no option:
new Array("Niteroi",

Mudei para :
new Array("Niteroi","Niteroi",

E agora está funcionando em todos os Browsers.

Muitíssimo grato pelo seu suporte.