2012-05-14 6 views
14
?

Ich habe eine Reihe von Divs, die als Tasten fungieren. Diese Tasten haben eine einfache jquery click() -Funktion, die in allen Browsern außer iOS funktioniert.Wie funktioniert meine "Klick" -Funktion mit iOS

Zum Beispiel:

<div class="button">click me</div> 

und

$('.button').click(function(){ 

    alert('hi'); 

}); 

Ich bin mir nicht sicher, warum dies nicht auf iOS funktioniert - klar gibt es keinen 'Klick' in iOS.

Leider habe ich kein iPhone-Gerät, um das selbst zu testen, aber ich bekomme eine Menge Beschwerden von meinen Kunden, die auf Dinge klicken und nichts passiert.

Was ist der Schlüssel, um diese Funktion zu bekommen?

+2

ich weiß nicht, über iOS-, aber Ihr Code für die Nutzer von Desktop-Browser entweder nicht funktionieren, wenn die Benutzer verwenden, um eine Tastatur, aber kein Zeigegerät (dh keine Maus) -, die einige Benutzer tun durch die Wahl, und andere Benutzer tun aufgrund einer körperlichen Behinderung. Sie sollten '' Elemente verwenden (Sie können sie immer noch so gestalten, dass sie so aussehen, wie Sie es möchten).Und wenn Sie zahlende Kunden haben, die iPhone-Kompatibilität erwarten, dann müssen Sie sich ein iPhone zum Testen besorgen - Sie können es als Geschäftsaufwand abschreiben ... – nnnnnn

+0

Viel zu viele fehlende Details in Ihrer Frage. Wenn Sie auf einem Mac arbeiten, führen Sie den iOS-Emulator mit Safari im Entwicklermodus aus. Übrigens, wann binden Sie den Click-Handler an .button? Tritt dies auf, nachdem '$ .ready' gefeuert wurde? –

+0

'Klick' funktioniert gut in iOS, Ihr Problem ist woanders. Und nnnnnn hat recht, du solltest auch nach '

Antwort

31

Click „: bedeutet Wenn ein mousedown- und mouseup Ereignis auf dem gleiche Elemente auftreten oder ein Element von der Tastatur aktiviert wird

von Jquery Bug, dort Arbeit um, nur "cursor: pointer" an die CSS des Elements hinzuzufügen und das Click-Ereignis. . wie erwartet funktioniert und Sie können sogar diese Jquery click on Ios Hilfe

+0

Überraschenderweise hat das funktioniert! – willdanceforfun

+10

Nun Android hat kein Problem mit seiner Initiative und machen "Klick" als Touch behandelt. iOS ist der neue IE –

1

Sie können dies nachschauen:

$('button').bind("touchstart", function(){ 
    alert('hi'); 
}); 

Eine andere Lösung ist das Element des Cursors einstellen Zeiger und es funktioniert mit jQuery live und click -Ereignis. Stellen Sie es in CSS ein.

+10

mit 'touchstart' könnte versehentlich einen Klick auslösen, wenn der Benutzer versucht zu scrollen – brettish

4

Eigentlich hat die akzeptierte Antwort nicht für mich arbeiten. Ich habe versucht, mit "Cursor: Zeiger", onclick = "", und konvertieren Sie das Element sogar zu einem Anker-Tag.

Was ich getan habe, um es funktionieren zu lassen, ist, das Touchstart-Ereignis anstelle des Klickereignisses zu binden. Um es allen Plattformen funktioniert auf i so zu einem hässlichen ua Spoofing hatte:

var ua = navigator.userAgent, 
event = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click"; 

jQuery("body").on(event, '.clickable_element', function(e) { 
    // do something here 
}); 
+1

Totally funktioniert für mich! Rewrote es ohne die 'jQuery (" body ")' obwohl, und verwendet einen etwas weniger verwirrenden var name anstelle von 'event', aber ich schätze, das letztere war nur zu klärenden Zwecken. – cptstarling

+1

Das hat den Trick für mich gemacht, danke! –

2

Basierend auf Marek's answer das ist mein nehmen auf sie (es ein bisschen ist aufgeräumt):

var ua = navigator.userAgent, 
pickclick = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click"; 

$('.clickable_element').on(pickclick, function(e) { 
    // do something here 
}); 

Es gibt noch eine Menge Arbeit vor sich für die Industrie, wenn es um Standards kommt ...

EDIT:

Haben sie nicht auf und Roid-Telefone. Nahm einen steifen Ansatz:

if (document.documentElement.clientWidth > 1025) { pickclick = 'click' } 
if (document.documentElement.clientWidth < 1025) { pickclick = 'touchstart' } 

$('.clickable_element').on(pickclick, function(e) { 
    // do something here 
}); 
1

auch basierend auf Marek's answer, die das Ereignis an das Gerät paßt sich um eine Funktion ausgelöst, hier ist ein Code, der einen Klick auf iOS-Geräten zu feuern zwingen, wo es zuerst ein Berührungsstart Veranstaltung:

var UA = navigator.userAgent, 
iOS = !!(UA.match(/iPad|iPhone/i)); 

if (iOS) { 
    $(document).on('touchstart', function (e) { 
     e.target.click(); 
    }); 
} 
Verwandte Themen