2016-04-04 8 views
-1

Ich versuche, den Mauszeiger über ein Element mit jQuery zu emulieren.Emulate über ein Element emulieren

Dies unterscheidet sich von dem Hinzufügen :hover zu dem Element; Ich möchte etwas ähnliches in der Funktion zu verwenden $(element).click(), aber tun $(element).hover() funktioniert nicht für mich.

Das fragliche Element ist (soweit ich das sehen kann) die jQuery UI Datepicker mit einem Tooltip auf Hover; Für ein Livebeispiel, siehe an AirBnB listing, klicken Sie auf den Kalendereintrag "dates" auf der rechten Seite und bewegen Sie den Mauszeiger über ein verfügbares Datum.

Ich möchte den Mauszeiger über jeden verfügbaren Zeitpunkt auszulösen, den Preis zu erhalten, oben zu schweben, obwohl tun:

$('.ui-datepicker.ui-widget .ui-datepicker-calendar:eq(0) tbody tr td:not(.ui-datepicker-unselectable)').each(function(){ 
    $(this).hover() 
}) 

oder einfach

$('.ui-datepicker.ui-widget .ui-datepicker-calendar:eq(0) tbody tr td:not(.ui-datepicker-unselectable)')[0].hover() 

nicht für mich arbeiten, noch hat mit mouseover(). Irgendeine Idee, wie ich dieses Verhalten replizieren kann?

+1

'hover()' ist kein einzelnes Ereignis, es sind zwei Ereignisse - 'mouseenter' und' mouseleave' - und hat daher keine parameterlose Trigger-Methode. Versuchen Sie stattdessen '$ (this) .mouseenter()'. –

+0

Versucht dies, obwohl in diesem Fall leider nicht funktioniert. Sie können es auf der verlinkten Website mit '$ ('. Ui-datepicker.ui-widget .ui-datepicker-kalender: eq (0) tbody tr td: nicht (.ui-datepicker-unselectable): eq (0) ') .trigger (' mouseenter '); ' – Jascination

+0

@Jascination: Sie meinen, Sie müssen es ** speziell ** auf der AirBnB-Website arbeiten? Deine Frage macht das nicht klar, es wird nur als Beispiel angeführt. Wenn Sie das brauchen, müssen Sie eine [mcve] replizieren, die Sie in der Frage replizieren **, da Fragen nicht darauf angewiesen sind, dass externer Inhalt bedeutungsvoll ist (weil externer Inhalt verrottet und die Frage damit nutzlos macht) andere in der Zukunft). –

Antwort

2

Sie trigger versuchen sollte das Ereignis -ing:

$("element").trigger('mouseenter'); 

Schauen Sie auch in diesem post on SO, sieht bei Ihnen sehr ähnlich.

+0

Guter Vorschlag, aber dies funktioniert nicht bei AirBnB. Siehe die oben verlinkte Website, öffne den "Check-in" -Datenpicker und versuche '$ ('. Ui-datepicker.ui-widget .ui-datepicker-kalender: eq (0) tbody tr td: nicht (.ui-datepicker- trigger ('mouseenter'); ' – Jascination

+0

Ich habe gesehen, wie du den Callback-Fehler bearbeitet hast, aber jetzt hast du die erste();) ausgelassen: ' $ ('. ui- datepicker.ui-widget .ui-datepicker-kalender: eq (0) tbody tr td: nicht (.ui-datapicker-nicht auswählbar): eq (0) '). first().trigger ('mouseenter'); ' Trotzdem kann ich den Datepicker nicht öffnen, um das Skript von der Konsole aus zu testen, also müssen Sie den Test machen. – zedling

+0

Das ': eq (0)' am Ende des Selektors negiert die Notwendigkeit für ein 'first()' :), aber wie Sie auf der Beispielseite sehen können, funktioniert das nicht. Sieht so aus, als ob es nach etwas anderem als Mouseenter Ausschau hält? – Jascination

0

Nun, Sie dies mit CSS nur tun können, ist hier ein vereinfachtes Beispiel:

.td-hover td { 
 
    position: relative; 
 
    width: 1em; 
 
    border: 1px solid #ddd; 
 
} 
 
.on-hover { 
 
    display: none; 
 
    position: absolute; 
 
    top: -1.5em; 
 
    left: -1em; 
 
    background: #eee; 
 
    border: 1px solid black; 
 
} 
 
.td-hover td:hover .on-hover { 
 
    display: inline-block; 
 
}
<table class="td-hover"> 
 
    <tbody> 
 
    <tr> 
 
     <td>1<span class="on-hover">one</span></td> 
 
     <td>2<span class="on-hover">two</span></td> 
 
     <td>3<span class="on-hover">three</span></td> 
 
     <td>4<span class="on-hover">four</span></td> 
 
     <td>5<span class="on-hover">five</span></td> 
 
     <td>6<span class="on-hover">six</span></td> 
 
     <td>7<span class="on-hover">seven</span></td> 
 
    </tr> 
 
    <tr> 
 
     <td>8<span class="on-hover">eight</span></td> 
 
     <td>9<span class="on-hover">nine</span></td> 
 
     <td>10<span class="on-hover">ten</span></td> 
 
     <td>11<span class="on-hover">eleven</span></td> 
 
     <td>12<span class="on-hover">twelve</span></td> 
 
     <td>13<span class="on-hover">thirteen</span></td> 
 
     <td>14<span class="on-hover">fourteen</span></td> 
 
    </tr> 
 
    </tbody> 
 
</table>

Aber wenn Sie JavaScript auf anstelle bestehen, verwenden Sie einfach die jQuery hover hinzufügen/entfernen einer Klasse:

$(".td-hover td").hover(
 
    function() { 
 
    $(this).find(".on-hover").addClass("showing"); 
 
    }, 
 
    function() { 
 
    $(this).find(".on-hover.showing").removeClass("showing"); 
 
    } 
 
);
.td-hover td { 
 
    position: relative; 
 
    width: 1em; 
 
    border: 1px solid #ddd; 
 
} 
 
.on-hover { 
 
    display: none; 
 
    position: absolute; 
 
    top: -1.5em; 
 
    left: -1em; 
 
    background: #eee; 
 
    border: 1px solid black; 
 
} 
 
.on-hover.showing { 
 
    display: inline-block; 
 
}
<table class="td-hover"> 
 
    <tbody> 
 
    <tr> 
 
     <td>1<span class="on-hover">one</span></td> 
 
     <td>2<span class="on-hover">two</span></td> 
 
     <td>3<span class="on-hover">three</span></td> 
 
     <td>4<span class="on-hover">four</span></td> 
 
     <td>5<span class="on-hover">five</span></td> 
 
     <td>6<span class="on-hover">six</span></td> 
 
     <td>7<span class="on-hover">seven</span></td> 
 
    </tr> 
 
    <tr> 
 
     <td>8<span class="on-hover">eight</span></td> 
 
     <td>9<span class="on-hover">nine</span></td> 
 
     <td>10<span class="on-hover">ten</span></td> 
 
     <td>11<span class="on-hover">eleven</span></td> 
 
     <td>12<span class="on-hover">twelve</span></td> 
 
     <td>13<span class="on-hover">thirteen</span></td> 
 
     <td>14<span class="on-hover">fourteen</span></td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>