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

У меня есть фрагмент кода 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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
4 300
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

[РЕДАКТИРОВАТЬ] Извините. Я ввел ошибку в своем первом сообщении, не внимательно изучив, как вы строите свой 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 имеет свойство value для выбора. Я думаю, вам нужно добраться до этого с помощью выбранной опции. Кроме того, я не уверен, что в глобальном пространстве имен есть свойство top, но вы сможете получить к нему доступ через window.top, чтобы задать местоположение. Наконец, я немного улучшил это, указав this в качестве аргумента, вы можете пропустить поиск элемента и ссылаться на него непосредственно из элемента управления, переданного в качестве аргумента.

Думаю, я исправил это - я пропустил использование id - это глобальная переменная? - поэтому его нельзя было удалять из вызова функции.

tvanfosson 02.11.2008 22:48

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

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.

Дело не в том, что IE «не имеет .value» элемента <select>, дело в том, что вы не указали никаких значений для ваших элементов <option>. Firefox, Safari и т. д. скорее всего, защитят вас от этой ошибки. Тем не менее, ваш элемент должен быть построен как:

<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 <select>.

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

document.getElementById("select1").value

Это говорит: «дайте мне текст, который находится в атрибуте value выбранного параметра в элементе select с идентификатором select1. У ваших параметров нет никаких значений. Когда Firefox и Safari сталкиваются с этой двусмысленностью, они возвращают текст выбранного вариант. Когда 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>

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

Другие вопросы по теме