Jsf 取消dragSource后隐藏dropzone

Jsf 取消dragSource后隐藏dropzone,jsf,drag-and-drop,richfaces,invisible,Jsf,Drag And Drop,Richfaces,Invisible,我有一个a4j:outputPanel,它是rich:dragSource的父级。在这个面板下面,我有一个不可见的rich:面板,它是我的dropzone。当我开始拖动上面的面板时,dropzone将可见。这是这样做的: <h:panelGroup id="panelWrapper"> <a4j:outputPanel onmousedown="beginDragDrop();" > <rich:dragSource type="type"

我有一个a4j:outputPanel,它是rich:dragSource的父级。在这个面板下面,我有一个不可见的rich:面板,它是我的dropzone。当我开始拖动上面的面板时,dropzone将可见。这是这样做的:

<h:panelGroup id="panelWrapper">
    <a4j:outputPanel onmousedown="beginDragDrop();" >
        <rich:dragSource type="type" />                           
        <h:outputText value="content" />                 
    </a4j:outputPanel>
</h:panelGroup>

<rich:panel  id="dropTargetPanelWrapper" >
    <rich:panel id="dropTargetPanel" rendered="#{bean.showDropTarget}" >
        <rich:dropTarget immediate="true" acceptedTypes="type" dropListener="#{bean.processDrop}" oncomplete="stopDragDrop();" render="panelWrapper" />     
    </rich:panel>
<rich:panel  id="dropTargetPanelWrapper" styleClass="dropTargetPanelWrapper"  >

<a4j:jsFunction name="beginDragDrop" action="#{bean.beginDragDrop}" render="dropTargetPanelWrapper" />
<a4j:jsFunction name="stopDragDrop" action="#{bean.stopDragDrop}" render="dropTargetPanelWrapper" />
通过onmousedown=beginDragDrop使dropzone可见;在a4j:输出面板上。到目前为止,这一切都很好。当用户将面板拖动到dropzone时,将调用适当的bean方法,并且oncomplete=stopDragDrop;对dropzone的修改将使dropzone再次不可见。但是当用户只是取消拖动时,他不会释放dropzone上的面板,dropzone仍然可见

为此,我尝试了onmouseup=stopDragDrop;但这会导致不调用bean,因为javascript函数在前面调用过。这会使dropzone不可见,因此不再有操作事件


如何使dropzone不可见?

您想实现什么目标?例如,为什么dropzone需要不可见?如果您只想在拖动过程中高亮显示它,那么可以在面板上使用onmouseenter和onmouseeve。在这种情况下,您应该避免使用呈现属性,使用类似display:none的内容。这只是样式设置。用户不应该总是在想要删除某些内容时看到dropzone。当我用onmouseenter使用面板时,用户必须知道面板在哪里,这是不舒服的好吧,用户应该在开始拖动之前知道他要把东西拖到哪里,不是吗?无论如何,你不能保持原样,而不是试图调用bean,只需使用jQuery在display:block和display:none之间切换就可以了吗?我想我为什么要这样做并不重要。dropzone上的所有函数对我来说都没有真正的帮助,对于jQuery也没有帮助,因为dropzone位于面板下方,如果用户只是释放被拖动的项目而没有将其拖动到dropzone上,dropzone onmouseout函数将永远不会被调用,就像您的示例中那样,但是您不会调用stopDragDrop,而是使用jQuery隐藏面板。