提问人:SDP 提问时间:6/17/2023 最后编辑:SDP 更新时间:6/17/2023 访问量:48
如果点击事件在Jquery中处于活动状态,如何关闭悬停?
How to turn off hover if on click event is active in Jquery?
问:
我有一个图标名称,我有 onclick 和悬停事件。tag-icon-arrow
但是由于我将鼠标悬停在图标上,悬停处于活动状态,单击时两者都处于活动状态,这是我不想要的,我知道在单击它会悬停在这里,但是如果我单击图标,它应该关闭。
bindViewEvents: function () {
let me = this
, window = this.$window
, $tagArrow = window.find(".tag-icon-arrow");
$tagArrow.off().on('click', function (e) {
me.highlight(e, true, true);
});
$tagArrow.hover(
function (e) {me.highlight(e, true);},
function (e) {me.highlight(e, false);}
);
$tagArrow.on('click', function (e) {
me.selectRole(e);
});
},
selectRole: function (e) {
let me = this;
let $target = $(e.currentTarget);
let hasRole = $target.is("[data-role]");
let tagid = hasRole ? $target.attr("data-tagid") : null;
me.api.xyz(tagid);
},
highlight: function (e, canHighlight, clicked) {
let me = this
, $target = $(e.currentTarget)
, _id = $target.attr('data-id')
, tagid = $target.attr("data-tagid")
, tbId = me.isZone ? $target.attr("data-M") : "";
if (canHighlight) {
clicked ? $target.addClass("active") :
$target.removeClass("active");
if (tbId === undefined) tbId = "";
let objData = [{"_id": _id, "tagid": tagid,}];
Common.Gateway.onEventsToXYZ({
"event": "xyz",
"fids": me.isZone ? [] : objData,
"rids": me.isZone ? objData : []
});
me.api.xyz(tagid);
} else {
if ($target.is(".active"))
return;
Common.Gateway.onEventsToXYZ({
"event": "xyz"
});
me.api.xyz(null);
$target.removeClass("active");
}
},
selectRole 和 highLight 函数是根据触发的事件调用的自定义函数。 如何改进这一点,以便两者正常工作?正如他们所期望的那样。
答:
0赞
Luca
6/17/2023
#1
执行此操作的最简单方法是使用一个标志来指示图标是否已被单击,然后使用该标志有条件地打开/关闭悬停效果。
代码如下:
bindViewEvents: function () {
let me = this
, window = this.$window
, $tagArrow = window.find(".tag-icon-arrow")
, clicked = false;
$tagArrow.off().on('click', function (e) {
me.highlight(e, true, true);
clicked = true;
});
$tagArrow.hover(
function (e) {
if (!clicked) {
me.highlight(e, true);
}
},
function (e) {
if (!clicked) {
me.highlight(e, false);
}
}
);
$tagArrow.on('click', function (e) {
me.selectRole(e);
clicked = true;
});
},
1赞
Alexander Nenashev
6/17/2023
#2
只是不要在选择角色时关闭突出显示:
const view = new function() { // I guess this is an angularjs controller
const self = Object.assign(this /* $scope */, {highlight, bindViewEvents, selectRole});
self.bindViewEvents();
function highlight(e, val = true){
$(e.target).toggleClass('highlighted', val);
}
function selectRole(e){
$(e.target).toggleClass('selected');
}
function bindViewEvents() {
const $tagArrow = $('.tag-icon-arrow');
$tagArrow
.hover(
e => self.highlight(e),
e => $tagArrow.is('.selected') || self.highlight(e, false)
)
.on('click', e => self.selectRole(e));
}
}
body{
margin:50px;
}
.tag-icon-arrow{
padding:20px 30px;
border-radius:10px;
background:#bbb;
cursor:pointer;
border: 1px solid transparent;
}
.tag-icon-arrow.highlighted{
background:#ffddee;
}
.tag-icon-arrow.selected{
border: 1px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="tag-icon-arrow">Hover & click me</a>
但最好使用 CSS:
const view = new function() { // I guess this is an angularjs controller
const self = Object.assign(this /* $scope */, {bindViewEvents, selectRole});
self.bindViewEvents();
function selectRole(e){
$(e.target).toggleClass('selected');
}
function bindViewEvents() {
const $tagArrow = $('.tag-icon-arrow');
$tagArrow
.on('click', e => self.selectRole(e));
}
}
body{
margin:50px;
}
.tag-icon-arrow{
padding:20px 30px;
border-radius:10px;
background:#bbb;
cursor:pointer;
border: 1px solid transparent;
}
.tag-icon-arrow:hover,.tag-icon-arrow.selected{
background:#ffddee;
}
.tag-icon-arrow.selected{
border: 1px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="tag-icon-arrow">Hover & click me</a>
评论
1赞
SDP
6/17/2023
谢谢你的回答,我的错误不是角度控制器,而是 BackboneJS 控制器(如果它们相同,则为 idk),但您的逻辑在这里非常正确。
1赞
Alexander Nenashev
6/17/2023
@SDP欢迎您:)如果你觉得我的答案有用,你可以接受它(复选框)并投票(向上箭头)。这样我就会得到积分奖励,并有动力在未来帮助你,谢谢
1赞
Alexander Nenashev
6/17/2023
@SDP应该可以工作,只需将 的正文复制到 your 并更改为 .并确保将类切换为bindViewEvents
bindViewEvents
self
this
selected
selectRole()
0赞
SDP
6/17/2023
谢谢,它实际上以一种奇怪的方式工作,因为我从来不知道我可以做 $any.hover().on()。像魅力一样工作。
评论
highlight()
selectRole()
highlight()
.off()
selectRole()
或highlight()