Отключить / включить обработчики событий div, используя jQuery 1.4.2
Мы используем страницу со слоями вкладок Javascript. Мы пытаемся отключить доступ к некоторым вкладкам на основе разрешений пользователей.
Например, вот пример вкладки:
<div class="executives tab productA productB productC" runat="server" id="executivesTop">
<div class="tabLeft">
<div class="tabMain">
Executives
</div>
</div>
</div>
"TabLeft" и "tabMain" предназначены только для CSS-макета вкладок и не влияют ни на что. Divs ExecutivesTop - это место, где происходит все действие. Мы используем отдельный файл.js, который назначает обработчики событий различным вкладкам.
Когда страница загружается, я хочу отключить все события mouseenter, mouseleave, mouseover и click на всех вкладках. Сначала я сделал это со следующими строками в (окне).load:
//this line disables the event handlers from the tabs
$(".tab").unbind('mouseover mouseenter mouseleave click');
//this line changes the basic css to appear "disabled"
$(".tab").css('color', 'grey');
У нас есть серверный скрипт, который определяет права текущего пользователя и отправляет их в поле, которое может прочитать jQuery. Затем jQuery просматривает эти разрешения и соответственно включает вкладки.
//SubscriptionsInput is a hidden label that has a list of user permissions in the form of "productA,productB,productC"
if (SubscriptionsInput.toLowerCase().indexOf("productA") >= 0) {
$(".productA").bind('mouseover mouseenter mouseleave click');
}
Очевидно, что это не сработает, поскольку я не переназначаю обработчики событий на вкладки. Различные события мыши проходят через таблицу классов, а события щелчка находятся в вышеупомянутом файле.js. Я не знаю, как переназначить их. Тем не менее, я думаю, что мои рассуждения верны: я отключаю все, а затем снова включаю, как того требуют разрешения.
Насколько я могу судить, простое решение состоит в том, чтобы использовать функциональные возможности.on() и.off(), что было бы здорово, если бы мы были на уровне jq1.9 или выше, но на уровне jq1.4.2 еще, что расстраивает. Я не могу использовать.bind()/. Unbind(), если нет простого способа присоединить обработчики событий из существующего файла.js.
Мне просто нужно иметь возможность отключить и включить "мышь *" и "щелчок" и не могу использовать.on()/. Off(). Кроме того, мне нужно иметь возможность вернуть CSS вкладок обратно к определениям таблицы стилей.
Надеюсь, я объяснил это достаточно четко. Кто-нибудь может предложить какие-либо предложения или уловки кода, которые я мог бы использовать, чтобы воплотить эту функциональность в жизнь?
редактировать: в моей первоначальной сборке были загружены все вкладки, и ОТСУТСТВИЕ разрешения отключило бы соответствующие вкладки, что сделало бы идею.unbind() эффективной (поскольку разрешения не были бы предоставлены или удалены в середине сеанса, поэтому отменная привязка - это нормально).), но некоторые вкладки применимы к нескольким уровням разрешений. Я бы предпочел включить контент, поскольку у пользователей есть разрешения, а не рисковать отключением того, что должно быть доступно на заданном уровне разрешений.
1 ответ
Измените свою логику, чтобы отменить привязку, только если у них нет разрешений.
//this line disables the event handlers from the tabs
//$(".tab").unbind('mouseover mouseenter mouseleave click');
//this line changes the basic css to appear "disabled"
//$(".tab").css('color', 'grey');
//SubscriptionsInput is a hidden label that has a list of user permissions in the form of "productA,productB,productC"
if (SubscriptionsInput.toLowerCase().indexOf("productA") == 0) {
$(".productA").unbind('mouseover mouseenter mouseleave click').css('color', 'grey');
}