Javascript не работает на IE - PullRequest
       13

Javascript не работает на IE

0 голосов
/ 02 ноября 2008

У меня есть фрагмент JavaScript, который очень хорошо работает в Firefox и Safari, но отказывается работать в IE:

var drop= function(id)
{
   if(document.getElementById("select1").value == "Ficha de pediatria"){
    top.location.href = "print.jsp?id="+id+"&type=2";
   }
   else if(document.getElementById("select1").value == "Ficha normal"){
        top.location.href = "print.jsp?id="+id+"&type=1";
   }
}

<select id="select1" name="select1" onChange="drop(id);return false;">
<option>Imprimir:</option>
<option>Ficha de pediatria</option>
<option>Ficha normal</option>
</select>

Я обрезал это, так как в нем было больше кода JSP, но он остался прежним. У кого-нибудь есть идеи, почему он не работает в IE?

Ответы [ 4 ]

5 голосов
/ 02 ноября 2008

[ПРАВИТЬ] Извините. Я внес ошибку в свой первый пост, не внимательно посмотрев, как вы строите свой URL. Я не должен был удалять параметр id. Я обновил код, и теперь он должен работать.

Попробуйте вместо этого:

function drop(ctl,id)
{
   var value = ctl.options[ctl.selectedIndex].value;

   if(value == "Ficha de pediatria"){
       window.top.location.href = "print.jsp?id="+id+"&type=2";
   }
   else if (value == "Ficha normal"){
       window.top.location.href = "print.jsp?id="+id+"&type=1";
   }
}

<select id="select1" name="select1" onChange="drop(this,id);return false;">
<option>Imprimir:</option>
<option>Ficha de pediatria</option>
<option>Ficha normal</option>
</select>

[ПРАВИТЬ] Немного объяснения ...

Я думаю, проблема в том, как он обращается к DOM. Я не думаю, что IE имеет значение свойства на выбор. Я думаю, что вы должны добраться до него через выбранный вариант. Кроме того, я не уверен, что в глобальном пространстве имен есть свойство top, но вы должны иметь возможность получить его через window.top, чтобы указать местоположение. Наконец, я сделал небольшое улучшение, указав this в качестве аргумента, вы можете пропустить поиск элемента и ссылаться на него непосредственно из элемента управления, переданного в качестве аргумента.

3 голосов
/ 02 ноября 2008

IE не нравится, как вы захватываете значение select

document.getElementById("select1").value

Это говорит: «дайте мне текст, который находится в атрибуте значения выбранного параметра в элементе выбора с идентификатором select1 . У ваших параметров нет значений. неоднозначность, они возвращают текст выбранного параметра. Когда Internet Explorer обнаруживает эту неоднозначность, он возвращает пустую строку. Ваш JavaScript будет работать как есть, если вы сделали что-то вроде

<select id="select1" name="select1" onChange="drop(this,id);return false;">
    <option value="Imprimir:">Imprimir:</option>
    <option value="Ficha de pediatria">Ficha de pediatria</option>
    <option value="Ficha normal">Ficha normal</option>
</select>

Если это невозможно, вы можете получить текст выбранного параметра.

var theSelect = document.getElementById("select1");
var theValue  = theSelect.options[theSelect.selectedIndex].text

Наконец, хотя это и не ваш прямой вопрос, жестко закодированный select1 не лучший способ попасть в список выбора. Попробуйте использовать это ключевое слово

function foo(theSelect){
    alert(theSelect.options);
}

...

<select id="whatever" onchange="foo(this);">
...
</select>

Это немного более обобщенно, и вы сможете использовать свою функцию для выбора с любым идентификатором.

1 голос
/ 02 ноября 2008

Дело не в том, что IE "не имеет .value" элемента

<select ...>
<option value="Imprimir">Imprimir:</option>
<option value="Ficha de pediatria">Ficha de pediatria</option>
<option value="Ficha normal">Ficha normal</option>
</select>

... и вы увидите более стандартное поведение x-браузера для свойства .value

0 голосов
/ 02 ноября 2008

Я вижу две возможные причины.

1 - способ объявления функции. Я никогда не видел такого, хотя, думаю, это работает.

Может быть, попробуйте следующее и посмотрите, все ли еще не работает:

function drop(id)
{
    // same code
}

2 - Возвращаемое значение false в IE не всегда ведет себя должным образом (поверьте, это зависит от компьютера). Поэтому вместо возврата false попробуйте:

onChange="drop(id);event.returnValue=false;return false;"

Если возможно, создайте метод, подобный этому:

function CrossBrowserFalse()
{
     if(IE) // use whatever you want to detect IE
     {
         event.returnValue = false;
     }

     return false;
}

и тогда в своих методах вы можете использовать:

onChange="drop(id);return CrossBrowserFalse();"

... да, IE странный иногда (часто)


Если эти два сбой, по крайней мере, убедитесь, что ваша функция вызова вызывается, поместив туда несколько предупреждений или точек останова, если ваша IDE поддерживает ее для javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...