Это верно - this
внутри обработчика относится к элементу, который вызвал событие. Если вы хотите использовать методы jQuery, вам нужно обернуть его в $
, чтобы сначала получить объект jQuery.
Если вы хотите избежать этого, если вы просто пытаетесь установить определенный атрибут данных, смело используйте вместо него .dataset
, например:
jQuery('.selector').on('click', function(event) {
this.dataset.attribute = 'foo';
});
[data-attribute="foo"] {
background-color: yellow;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="selector">click</div>
Это поведение идентично обработчикам событий в vanilla JS: this
относится к элементу, который вызвал событие, что соответствует принцип наименьшего удивления:
document.querySelector('.selector').addEventListener('click', function(event) {
this.dataset.attribute = 'foo';
});
[data-attribute="foo"] {
background-color: yellow;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="selector">click</div>
Было бы возможно создать функция on
, которая сначала оборачивает this
в jQuery, хотя это будет немного странно:
const on = (selector, event, handler) => {
$(selector).on(event, function(...args) {
handler.apply($(this), args);
});
};
on('.selector', 'click', function(event) {
this.attr('data-attribute', 'foo');
});
[data-attribute="foo"] {
background-color: yellow;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="selector">click</div>
MenuItemFont *start = [MenuItemFont itemFromString:@"Start Game"
target:self
selector:@selector(startGame:)];
[start.label setRGB:0 :0 :0]; // Black menu item
Маркировка является свойством MenuItemFont, подклассом MenuItem, таким образом, Вы теряете его во время неявного броска к MenuItem.
С другой стороны, Вы могли сделать:
[((MenuItemFont *)start).label setRGB:0 :0 :0]
(но это ужасно, и startMenu возьмет MenuItemFont без жалоб).
Следует иметь в виду, что цвета по большей части hardcoded в MenuItemFont, таким образом звонить 'setIsEnabled' задержит цвета к серому или белому цвету. Это происходит вокруг строки 239 из MenuItem.m, если необходимо настроить ее. Если я найду время для создания патча для представления этой функциональности на MenuItemFont (предполагающий, что это уже не находится в этих пред.7.1 источниках), то я обновлю свое сообщение.