Для плагина JQuery, который я пытаюсь написать, я хотел бы сохранить локальную переменную, область действия которой ограничена HTML, идентифицированным селектором.В приведенном ниже базовом примере HTML-страница имеет два элемента формы, я выбираю каждый элемент формы отдельно, и внутри каждого экземпляра я хочу получить количество текстовых элементов, содержащихся в форме.В приведенном ниже примере «_elements» всегда содержит количество элементов ввода текста для последнего вызванного селектора.Теперь я думаю, что это из-за объема и закрытия уровня Javascript, но не знаю, как это реализовать.Может кто-нибудь, пожалуйста, покажи мне ошибку моих путей.
Пожалуйста, не предлагайте другие способы сделать это (то есть вообще не хранить переменную, всегда выбирать количество совпадающих элементов напрямую - я знаю, что это сработает, но это только упрощенный примерпроблемы с локальными переменными
<html>
<head>
<script language="javascript" src="jquery-1.4.4.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
(function ($) {
var methods = {
Setup: function (options) {
if ($(this).length == 0)
throw new Error("AutoSave() selector did not find required element");
if ($(this).length > 1)
throw new Error("AutoSave() is not designed to handle a selector that matches two or more elements!");
_elements = $('INPUT[TYPE=TEXT]', this)
_elements.length;
return this;
},
NumOfElements: function (options) {
alert(_elements.length);
return this;
}
};
$.fn.autoSave = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.Setup.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.AjaxClickEvent');
}
};
})(jQuery);
</script>
</head>
<body>
<form method="post" action="" id="myForm" name="myForm">
<input type="text" id="txt1" name="txt2" />
<input type="submit" id="submit" name="submit" />
</form>
<form method="post" action="" id="myForm2" name="myForm2">
<input type="text" id="Text1" name="Text1" />
<input type="text" id="Text2" name="Text2" />
<input type="submit" id="submit1" name="submit1" />
</form>
<script>
$(document).ready(function () {
$("#myForm").autoSave();
$("#myForm").autoSave('NumOfElements'); // Shows 1
$("#myForm2").autoSave();
$("#myForm2").autoSave('NumOfElements'); // Shows 2
$("#myForm").autoSave('NumOfElements'); // Shows 2 (should be 1)
});
</script>
</body>
</html>