Я оцениваю входные данные, но я наконец-то понял это, и вот как я иду инициализация , которая была занозой на моей стороне.
То, что вы никогда не захотите сделать, - это загрязнить свое глобальное пространство имен набором недолговечных идентификаторов. Каждый раз, когда вы помещаете id=""
в элемент, вы делаете именно это (то же самое для любой функции верхнего уровня). Опираясь на jQuery, данные HTML5 и CSS, я нашел решение моей проблемы, которое я считаю довольно элегантным.
Что я делаю, так это то, что я резервирую класс CSS для определенного поведения, а затем использую данные HTML5 для параметризации поведения. Когда документ готов, я запрашиваю документ (используя Query) для класса CSS, который представляет поведение, и инициализирую поведение на стороне клиента.
Я много работал над ASP.NET, и в этом контексте id=""
и name=""
принадлежат ASP.NET и довольно бесполезны для чего-то еще, кроме внутреннего ASP.NET. Обычно вы получаете доступ к серверному свойству ClientID
, к которому вы можете обратиться из клиентского JavaScript, это очень хлопотно. Они сделали это проще в 4.0, но, по сути, я думаю, что это в значительной степени сломано.
Использование этого гибридного CSS, данных HTML5 и jQuery решает эту проблему в целом. Вот пример присоединенного поведения, которое использует регулярные выражения для проверки ввода текстового поля.
<input type="text" class="-input-regex" data-regex="^[a-z]+$" />
А вот и сценарий:
$(function () {
function checkRegex(inp) {
if (inp.data("regex").test(inp.val()))
inp.data("good-value", inp.val());
else
inp.val(inp.data("good-value"));
}
$(".-input-regex")
.each(function () {
// starting with jQuery 1.5
// you can get at HTML5 data like this
var inp = $(this);
var pattern = inp.data("regex");
inp.data("regex", new RegExp(pattern));
checkRegex(inp);
})
.keyup(function (e) {
checkRegex($(this));
})
.change(function (e) {
checkRegex($(this));
})
.bind("paste", undefined, function (e) {
checkRegex($(this));
})
;
});
Абсолютно чисто, без фанков id=""
или навязчивой зависимости.