Получение неопределенного при попытке получить значение формы в IE8 - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть форма ввода, вложенная в div, определенная следующим образом:

<div class="login-input">
  <input type="text" name="userId">
</div>

Я добавил кнопку ниже, и внутри события click для этой кнопки у меня есть код, подобный этому:

        click: function(){
            var user = document.getElementsByName(inputTitle)[0].value;
            var myRequest = new Request({
                url: '/Context/servletName',
                method: 'post',
                data: {'user': user},
                onRequest: function(){
                    $('container').setStyle('cursor', 'progress');
                },
                onSuccess: function(responseText){
                    $('container').setStyle('cursor', 'auto');
                    window.location = responseText;
                },
                onFailure: function(){
                    $('container').setStyle('cursor', 'auto');
                }
            });
            myRequest.send();
        }

Это прекрасно работает во всех браузерах, которые я тестировал (Chrome, FF, Safari), но в IE8 следующая строка кода вызывает проблемы:

var user = document.getElementsByName(inputTitle)[0].value;

Я проверил в инструментах разработки IE, что inputTitle имеет значение "userId".Проблема в том, что

document.getElementsByName(inputTitle)[0];

не определено.

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

// Returns valid object
document.getElementsByName(inputTitle);

// Returns null
document.getElementsByName(inputTitle).item(0);
document.getElementsByName(inputTitle).value;

Как всегда, заранее спасибо ...

РЕДАКТИРОВАТЬ: Доказательство, я не сумасшедший .... Values from IE dev tools debugger JS Error shown in debugger

IE version

Ответы [ 4 ]

2 голосов
/ 13 апреля 2011

Я сделал быстрый тестовый пример, чтобы доказать, что код работает - http://jsfiddle.net/DmmcE/ (проверено на IE8).

Выполнение:

var user = document.getElementsByName('userId')[0];

Возвращает [object HTMLInputElement].

Это означает, что проходящий вами inputTitle не передает правильную вещь.

Тем не менее, поскольку вы используете MooTools, почему бы не сделать это способом MooTools:

document.getElement('input[name=userId]').get('value');

Пример: http://jsfiddle.net/UZTK4/

1 голос
/ 13 апреля 2011

Вы пробовали с .innerHTML.

Надеюсь, это работает!

0 голосов
/ 13 апреля 2011

Попробуйте использовать JQuery, чтобы получить элемент вместо:

$("input[@name='inputTitle']").click(

вот хорошая ссылка с дополнительной информацией http://jivebay.com/2007/05/30/handling-checkboxes-radio-buttons-and-select-options-in-jquery/

0 голосов
/ 13 апреля 2011

Я бы рекомендовал вместо этого использовать id и getElementById.Это должно быть более надежным и быстрым;все, что поддерживает JavaScript, должно поддерживать getElementById.

Небольшое прибегание к поиску подсказывает, что IE и getElementsByName действительно не очень хорошо ладят.Обычно я использую атрибуты ID для ссылки на конкретные элементы и редко работаю в сыром JavaScript для борьбы с DOM, поэтому не могу сказать, что конкретно не так.

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