Я хочу иметь множество элементов «infoItem», каждый из которых имеет свой собственный jQuery, который ими управляет. Может ли кто-нибудь сказать мне, почему, когда я называю «displayText()», что элементы внутри этой функции не те элементы в элементе, который содержит обработчик кликов, но всегда элемент LAST на странице?Как вызвать метод из jQuery .click() и сохранить контекст?
<html>
<head>
<script type="text/javascript" src="systemJavascript/jquery-1.8.3.min.js"></script>
</head>
<body>
<div class="infoItem">
<div class="menu">
<span class="menuOne">one</span>
<span class="menuTwo">two</span>
</div>
<div class="content">intro message</div>
</div>
<div class="infoItem">
<div class="menu">
<span class="menuOne">eins</span>
<span class="menuTwo">zwei</span>
</div>
<div class="content">Introtext</div>
</div>
</body>
</html>
<script type="text/javascript">
var INFOITEM = INFOITEM || {};
INFOITEM.initialize = function(infoItem) {
var elemMenuOne;
var elemMenuTwo;
var elemContent;
this.defineVariables = function() {
elemMenuOne = infoItem.find('.menuOne');
elemMenuTwo = infoItem.find('.menuTwo');
elemContent = infoItem.find('.content');
}
this.decorateElements = function() {
elemMenuOne.css('background-color', 'beige');
this.decorateAsLink(elemMenuOne);
elemMenuTwo.css('background-color', 'beige');
this.decorateAsLink(elemMenuTwo);
}
this.functionalizeElements = function() {
that = this;
elemMenuOne.click(function(e) {
that.displayText('ONE');
});
elemMenuTwo.click(function(e) {
that.displayText('TWO');
});
}
this.displayText = function(text) {
elemContent.html('you selected ' + text);
}
this.decorateAsLink = function(elem) {
elem.css({
'cursor' :'pointer',
'text-decoration' : 'underline',
'font-weight' : 'normal'
});
}
this.defineVariables();
this.decorateElements();
this.functionalizeElements();
}
$('.infoItem').each(function(){
INFOITEM.initialize($(this));
});
</script>
Когда вы вызываете 'INFOITEM.initialize', вы устанавливаете' this.defineVariables' функции. Каждый раз, когда вызывается 'initialize',' defineVariables' заменяется на новую функцию. Итак, после цикла 'each'' defineVariables' является функцией, связанной с последним элементом. –