Javascript 拖放后丢失鼠标悬停事件

Javascript 拖放后丢失鼠标悬停事件,javascript,Javascript,我有一个页面,其中有可滚动的字符串div和一个由几个div组成的单独网格 通常,当我翻滚时,字符串上的鼠标悬停会突出显示它们 在我将一个字符串从上一组div拖动到其中一个grid div中后,鼠标悬停高亮显示将不再工作,直到我再次单击鼠标(无论在何处)。同一页上单独div中的按钮在鼠标上方也不会高亮显示 我可以单击任何div(包括drop目标)以恢复鼠标悬停突出显示,因此,单击似乎可以重新启动鼠标悬停事件 这只发生在一滴之后。我尝试生成一个点击,并将ev.target设置为0 ondragend

我有一个页面,其中有可滚动的字符串div和一个由几个div组成的单独网格

通常,当我翻滚时,字符串上的鼠标悬停会突出显示它们

在我将一个字符串从上一组div拖动到其中一个grid div中后,鼠标悬停高亮显示将不再工作,直到我再次单击鼠标(无论在何处)。同一页上单独div中的按钮在鼠标上方也不会高亮显示

我可以单击任何div(包括drop目标)以恢复鼠标悬停突出显示,因此,单击似乎可以重新启动鼠标悬停事件

这只发生在一滴之后。我尝试生成一个点击,并将ev.target设置为0 ondragend(我通常不会听),但仍然没有骰子(也尝试了聚焦,但我认为这不是问题)

如果mouseover事件在拖放后没有触发,或者其他元素看不到它,那么如何在不手动单击鼠标的情况下将其取回

只是想一想:我做的测试显示,鼠标在一次跌落后没有发生意外,我也没有点击鼠标的后记,所以如果我在js中收听事件,我可以做文本突出显示,它会工作,所以有一个解决方法

但是,我更改了css选择器中的文本颜色(schedtxt类是动态创建的div,在strcont div中滚动),为什么我需要在拖放后单击鼠标以获得浏览器(在我的示例中是Chromium/V8)来处理css规则

.strcont{
    width:      96%;
    height:     115px;
    overflow-x: hidden;
    overflow-y: auto;
    cursor:     default;
}

.schedtxt{
    width:      100%;
    border: 1px solid transparent;
    font-family:arial, sans-serif;
    font-size:  11px;
    font-weight:600;
    color:      #aaaaaa;
    padding:0px 0px 0px 5px;
    overflow:   hidden;
    white-space:nowrap;
    cursor:     default;
}

.schedtxt:hover{
    color:#ececec;
}
编辑:

修改上面的测试函数可以像预期的那样工作并修复问题,但是仍然有一个问题,那就是为什么当css规则应该处理它时,我甚至需要这样做

//workaround for mouseover highlight after drop problem
/////////////////////////////////////////////////////////////
function logMouseMove(e)
{
    var evt=e.type;
    var idt=(e.target||e.srcElement).id;

    if((idt.indexOf('sc')>-1)||(idt.indexOf('playon')>-1)||(idt.indexOf('scsav')>-1))
    {
        var el=document.getElementById(idt);
        if(evt=='mouseover') el.style.color='#ededed';
        if(evt=='mouseout')  el.style.color='#aaaaaa';
    } 
    return false;
}

你的代码在哪里?你要全部4356行吗?如果没有css、nwjs和节点模块,也不会有什么好处。我不能只划分出我正在工作的div,然后仍然让它运行,那么仅仅是D&D的东西怎么样?这就是它正在失去它的地方。4356行比零行更能提供信息。你如何期望你的问题得到答案?一个单独的例子是理想的,是的,你可以把它刻出来。这里的每一个问题都包括这一点。那么,你的代码在哪里?你想要全部4356行吗?如果没有css、nwjs和节点模块,也不会有什么好处。我不能只划分出我正在工作的div,然后仍然让它运行,那么仅仅是D&D的东西怎么样?这就是它正在失去它的地方。4356行比零行更能提供信息。你如何期望你的问题得到答案?一个单独的例子是理想的,是的,你可以把它刻出来。这里的每一个问题都包括这一点。
wjs version: 0.12.3
test3.html:4097 streams-mf.txt
test3.html:2823 canplay
test3.html:2827 play

////// initial mouseover on strings
test3.html:4124 mouseover target=strcont move
test3.html:4124 mouseover target=sc7 move
test3.html:4124 mouseover target=sc6 move

///// dragover on cell-4 div
test3.html:4124 mouseover target=4 move

///// drop on cell-3 div
test3.html:4124 mouseover target=3 move

///// dragend - mouseover back to strings div
test3.html:4124 mouseover target= move
test3.html:4124 mouseover target=strbut move

///// mouseover events fired on strings divs
///// but no highlighte until clicked
test3.html:4124 mouseover target=sc7 move
test3.html:4124 mouseover target=sc6 move
test3.html:4124 mouseover target=sc5 move
test3.html:4124 mouseover target=sc4 move
test3.html:4124 mouseover target=sc3 move
test3.html:4124 mouseover target=sc2 move
test3.html:4124 mouseover target=sc1 move
.strcont{
    width:      96%;
    height:     115px;
    overflow-x: hidden;
    overflow-y: auto;
    cursor:     default;
}

.schedtxt{
    width:      100%;
    border: 1px solid transparent;
    font-family:arial, sans-serif;
    font-size:  11px;
    font-weight:600;
    color:      #aaaaaa;
    padding:0px 0px 0px 5px;
    overflow:   hidden;
    white-space:nowrap;
    cursor:     default;
}

.schedtxt:hover{
    color:#ececec;
}
//workaround for mouseover highlight after drop problem
/////////////////////////////////////////////////////////////
function logMouseMove(e)
{
    var evt=e.type;
    var idt=(e.target||e.srcElement).id;

    if((idt.indexOf('sc')>-1)||(idt.indexOf('playon')>-1)||(idt.indexOf('scsav')>-1))
    {
        var el=document.getElementById(idt);
        if(evt=='mouseover') el.style.color='#ededed';
        if(evt=='mouseout')  el.style.color='#aaaaaa';
    } 
    return false;
}