Как я могу получить JavaScript Javascript для реализации функциональности ключевого слова this? - PullRequest
2 голосов
/ 11 апреля 2010

Есть ли обходной путь для Internet Explorer для реализации функциональности, предлагаемой ключевым словом javascript «this», для получения элемента dom, который вызвал событие?

Мой сценарий проблемы: У меня есть переменное количество текстовых полей в форме HTML, как

<input type="text" id="11"/>  
<input type="text" id="12"/>

..

Мне нужно обработать событие «onchange» для каждого текстового поля, и обработка зависит от «id» поля, которое вызвало событие. Пока я понимаю, что мои варианты: 1) прикрепить выделенный обработчик событий для каждого текстового поля. так что если у меня есть n полей, у меня есть n различных функций, что-то вроде:

<input type="text" id="11" onchange="function11();"/>  
<input type="text" id="12" onchange="function12();"/>

но текстовые поля добавляются и удаляются динамически, поэтому лучше было бы иметь вместо них одну универсальную функцию.

2) используйте ключевое слово this, например:

<input type="text" id="11" onchange="functionGeneric(this);"/>  
<input type="text" id="12" onchange="functionGeneric(this);"/>

Но эта опция не работает с Internet Explorer.

Может кто-нибудь предложить обходной путь для того, чтобы заставить его работать в IE или каком-либо другом решении, которое может быть применено здесь? Благодаря.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2010

Я не могу воспроизвести вашу проблему. Вот SSCCE на основе последней информации в комментариях:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2618458</title>
        <script>
            function functionGeneric(id) {
                alert(id); // Shows either 11 or 12 correctly.
            }
        </script>
    </head>
    <body>
        <input type="text" id="text_11" onchange="functionGeneric(this.id.split('_')[1]);"/>  
        <input type="text" id="text_12" onchange="functionGeneric(this.id.split('_')[1]);"/>
    </body>
</html>

Отлично работает во всех основных браузерах, которые у меня есть. Ваша настоящая проблема лежит где-то еще. Пока вы не придумали больше деталей или, что еще лучше, SSCCE, он стреляет в темноте по коренной причине.

1 голос
/ 11 апреля 2010

Второй вариант, вероятно, не работает, потому что идентификаторы элементов должны начинаться с алфавита или символа подчеркивания (по крайней мере, в соответствии со спецификацией).

Я бы выбрал что-то вроде этого:

// make the ids start with a word, like "foo", followed by "_", followed by a number
$("input[id^='foo_']").change(function() {
    doSomething(this.id.split("_")[1]); // extract the number, pass to function
});

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

...