Вместо упомянутого this
вместо него можно использовать event.currentTarget
:
$("i").click(function(event)
{
changeColor($(event.currentTarget));
});
const changeColor = ($element) =>
{
if (!$element.hasClass('clicked'))
console.log('not clicked class');
}
.clicked {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<i class="fas fa-star fa-lg clicked">Button 1</i>
<i class="fas fa-star fa-lg">Button 2</i>
<i class="fas fa-star fa-lg">Button 3</i>
Использование this
в коде может привести к путанице, потому что вам нужно хорошо знать, как это работает. Многие люди склонны не использовать его из-за этого.
Имейте в виду, что я переименовал obj
в $element
. Я настоятельно рекомендую использовать префикс $
, чтобы показать, что эта переменная содержит jQuery.
Только пятно, где ActiveX
упоминается в коде jQuery, для ActiveXObject
который используется для XMLHttpRequests:
// Create the request object; Microsoft failed to properly
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
Существует нерешенный вопрос здесь... кажется, что jQuery не делает нейтрализации для использования собственного XMLHttpRequest на IE7 (это, вероятно, что Вы испытываете).
Также это могло бы помочь: ссылка
jQuery, как большинство библиотек, которые оказывают поддержку для Ajax, будет использовать ActiveX для создания объекта XMLHttpRequest при выполнении в IE. Поскольку это - то, как Вы добираетесь XMLHttpRequest
объект в IE. Если Вы отключаете его, то Вы не получаете Ajax.
Так не, не волнуйтесь об этом. Если Вы не будете использовать Ajax, то у Вас не будет проблем в системах, где ActiveX отключен; если Вы сделаете, то у Вас будут проблемы независимо от библиотеки, если Вы не будете использовать обходное решение, такое как использование iframes для подачи фоновых запросов.
В дополнение к причинам того, почему jQuery, возможно, придется использовать ActiveX (т.е. Ajax), необходимо также полагать, что не все использования jQuery для функциональности Ajax.
Независимо от функциональности AJAX в IE, в jQuery 1.3.2 была проблема, из-за которой этот баннер отображался при первоначальной загрузке jQuery, даже если вы ничего с ним не делали. См. с отметкой № 4017 . Проблема была решена в наборе изменений № 6268 и будет исправлена в jQuery 1.3.3 после его выпуска.