Ошибка JavaScript в Chrome и Mozilla, но не в Opera.Имя не определено - PullRequest
1 голос
/ 30 января 2012

Итак, я недавно начал программировать страницы ... Мало того, и я пытался что-то сделать на странице, которую я делал ранее, поэтому я просто скопировал код и изменил значения. Мне было интересно, если кто-нибудь может затенить свет, почему он работал нормально в моем браузере Opera, но не на моем Chrome или Firefox (я использовал wamp для моего компьютера, выступая в качестве локального веб-сервера)

Я использовал элемент и изменение его значения (пользователь выбирал дату) для вызова функции, которая использовала ajax, а также для вызова базы данных и возврата, я не думаю, что детали нужны)

Итак, у меня было следующее

<select name="daySelector" id="daySelectorId" onchange="changeDate(daySelector.value)">
    <option value="-1">Day</option>
    <option value="2012-01-30">2012-01-30</option>
    <option value="2012-01-31">2012-01-31</option>
    <option value="2012-02-01">2012-02-01</option>
    <option value="2012-02-02">2012-02-02</option>
    <option value="2012-02-03">2012-02-03</option>
    <option value="2012-02-04">2012-02-04</option>
    <option value="2012-02-05">2012-02-05</option>
    <option value="2012-02-06">2012-02-06</option>
    <option value="2012-02-07">2012-02-07</option>
    <option value="2012-02-08">2012-02-08</option>
    <option value="2012-02-09">2012-02-09</option>
    <option value="2012-02-10">2012-02-10</option>
    <option value="2012-02-11">2012-02-11</option>
    <option value="2012-02-12">2012-02-12</option>
    <option value="2012-02-13">2012-02-13</option>
</select>

Опера работала просто отлично и вернула то, что я хотела ... Но Chrome и Firefox почему-то говорят, что daySelector не определен ... Когда я использую ссылку "this", все браузеры работают просто отлично. Самое смешное, что проект, из которого я взял код, был тем, что я делал до того, как обновил свой компьютер, на котором был установлен только Firefox (более старая версия), и я уверен, что он не вызвал никаких проблем ...

Так что любые идеи. Я понимаю, что это не проблема сама по себе, но мне любопытно узнать подробности, подобные этой, и я хотел бы знать ... Кстати, тем, кто программировал в html / ajax / js / ... более нескольких месяцев ... Должен ли я просто передать весь элемент и взять то, что мне нужно внутри функции?

Ответы [ 4 ]

2 голосов
/ 30 января 2012

Opera, вероятно, ссылается на document.daySelector.value, тогда как FF и Chrome ссылаются на window.daySelector.value.Замените на this.value, это будет связано с узлом.

1 голос
/ 30 января 2012

Замените ваш onchange на: onchange="changeDate(this.value)"

daySelector не определен в этом контексте.Опера должна обработать это для вас или молча поглотить ошибку.

0 голосов
/ 30 января 2012

Представленные ответы верны, однако я призываю вас взглянуть на jQuery, так как это было бы намного проще, и это кросс-браузер.

Например:

// Select the form element by id using the jQuery selector
var daySelector = $('#daySelectorId');

// Set the onchange event
daySelector.onChange(function(){
     // Get the value of the form element
     var value = $(this).val();
     // Call the change date function
     changeDate(value);
});

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

Как только вы получите jist из jQuery, вы сможете сжать приведенный выше оператор в:

$('#daySelectorId').onChange(function(){changeDate($(this).val())});

Просто поместите это в свой код JavaScript и удалите атрибут 'onchange = changeDate (day ...') из вашего html.

Вам не нужно беспокоиться об этом неработающем кросс-браузере

Обязательно посмотрите документацию jQuery, чтобы узнать, как ее реализовать. Опять же, это очень просто. Быстрый пример использования кода Google (не забудьте получить ключ API от Google, ссылка находится ниже):

<script type="text/javascript" src="http://www.google.com/jsapi?key=GENERATED_API_KEY"></script>
<script type="text/javascript">
  google.load("jquery", "1.7.1");
</script>

Выше просто загрузит jQuery на ваш сайт. Разместите это на всех своих веб-страницах, которые вы хотели бы использовать.

Получите ключ API здесь: http://code.google.com/apis/loader/signup.html

Надеюсь, это поможет

0 голосов
/ 30 января 2012

Заменить

onchange="changeDate(daySelector.value)"

на

onchange="changeDate(this.value)"

это должно работать нормально

...