Google AJAX Transliteration API: можно ли сделать все поля ввода на странице транслитерируемыми? - PullRequest
3 голосов
/ 18 апреля 2010

Я использовал «Google AJAX Transliteration API», и у меня все хорошо.

http://code.google.com/apis/ajaxlanguage/documentation/referenceTransliteration.html

В настоящее время у меня есть проект, который требует, чтобы все поля ввода на каждой странице (теги input и textarea) были транслитерируемыми, в то время как эти поля ввода отличаются от страницы к странице (динамические). Как я знаю, мне нужно вызывать метод makeTransliteratable (elementIds, opt_options) в вызове API, чтобы определить, какие поля ввода сделать транслитерируемыми, и в моем случае здесь я не могу предварительно определить эти поля вручную. Есть ли способ добиться этого?

Заранее спасибо

1 Ответ

4 голосов
/ 18 апреля 2010

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

Беглый взгляд на ссылку на API говорит, что makeTransliteratable будет принимать массив строк id или массив элементов. Так как мы не знаем идентификаторы элементов заранее, мы передадим массив элементов.

Итак, как получить массив элементов?

Я покажу вам два пути: трудный путь и легкий путь.

Во-первых, чтобы получить все текстовые области, мы можем сделать это с помощью API document.getElementsByTagName:

var textareas = document.getElementsByTagName("textarea");

Получить список входных данных немного сложнее, поскольку мы не хотим включать флажки, переключатели и т. Д. Мы можем различить их по атрибуту типа, поэтому давайте напишем быструю функцию, чтобы это различить:

function selectElementsWithTypeAttribute(elements, type)
{
    var results = [];
    for (var i = 0; i < elements.length; i++)
    {
        if (elements[i].getAttribute("type") == type)
        {
            results.push(elements[i]);
        }
    }
    return results;
}

Теперь мы можем использовать эту функцию для получения входных данных, например:

var inputs = document.getElementsByTagName("input")
var textInputs = selectElementsWithTypeAttribute(textInputs, "text");

Теперь, когда у нас есть ссылки на все текстовые поля, мы можем объединить их в один массив и передать его в API:

var allTextBoxes = [].concat(textareas).concat(textInputs);
makeTransliteratable(allTextBoxes, /* options here */);

Итак, все это должно работать, но мы можем упростить это при разумном использовании библиотечных методов. Если бы вам нужно было скачать jQuery (google it), вы могли бы написать вместо этого более компактный код:

var allTextBoxes = $("input[type='text'], textarea").toArray();
makeTransliteratable(allTextBoxes, /* options here */);

При этом используется селектор CSS, чтобы найти все входные данные с атрибутом типа «текст» и все текстовые области. Есть удобный метод toArray, который помещает все входные данные в массив, готовый к передаче в makeTransliteratable.

Надеюсь, это помогло, Douglas

...