span inbutton, kann in ff nicht angeklickt werden

8

Mein CODE

HTML:

%Vor%

JS:

%Vor%

CSS:

%Vor%

Demo

Problem

Ich kann auf .icon in Chrome klicken, aber nicht in ff. Wenn ich auf .icon klicke, klickt es auf ganz button .

Frage:

Ist mein Code nicht gültig? Wenn mein Code gültig ist, was ist die Lösung für dieses Problem.

Was ich versucht habe

  1. Ich habe versucht, $('.icon').click() von der Konsole aus zu machen, und es funktioniert perfekt in ff, so dass das Problem ist, dass span in button nicht anklickbar ist.

  2. e.preventDefault() und e.stopPropagation funktionieren auch nicht.

  3. Ich habe versucht,   in span zu setzen, funktioniert aber auch nicht.

Jashwant 04.02.2013, 15:26
quelle

3 Antworten

12

Siehe die Spezifikation , vor allem die verbotenen Inhalte (in der SGML-Definition, für Unterstützung lesen, hier ): a s , form s, Formular "Kontrollen" ( input , select , usw.) und fieldset s.

Während Sie korrekt feststellen, dass span s (und div s usw.) legale Inhalte eines button -Elements sind, haben die illegalen Elemente alle damit zu tun, dass Sie Schaltflächeninhalte haben, die etwas anderes als Layouts haben / Styling.

Ich sehe in der Spezifikation nichts, was ausschließt, was Sie zu tun versuchen, aber ich sehe es sehr entmutigend und wäre nicht überrascht, wenn verschiedene Browser dies "entmutigen", indem sie es nicht unterstützen.

>

Was soll ich sagen: Finden Sie einen anderen Weg, um das zu tun, was Sie wollen, wenn Sie Cross-Browser-Unterstützung haben wollen. Ich verstehe nicht, was Sie eigentlich machen wollen, deshalb halte ich es nicht für möglich, Alternativen vorzuschlagen. Ich verstehe, dass Sie anders auf das Klicken auf den Knopf als das Symbol reagieren möchten - aber das ist eine (gute, btw) Demonstration dessen, was Sie nicht wollen, nicht eine Erklärung eines tatsächlichen Problems, das Sie lösen wollen / p>

Eine Möglichkeit besteht darin, keine Schaltfläche zu verwenden und stattdessen ein anderes span oder ein div :

zu verwenden %Vor%     
Carl 04.02.2013, 16:00
quelle
0

Wenn Sie hier sind, wird diese Lösung vielleicht für Sie funktionieren, obwohl sie nicht direkt mit der Frage in Verbindung steht.

Wenn Sie ein

angewendet haben
  • $("button").click() Listener und
  • Ihre Schaltfläche enthält ein <span> oder ein beliebiges anderes <tag> und
  • Ihre .click Rückruffunktion bezieht sich auf $(this) (oder sogar this )

Wenn Sie auf die Schaltfläche klicken, wird this wahrscheinlich das oberste Tag sein, auf das Sie geklickt haben.

Dies wird oft, wie in meinem Fall, den Anrufer falsch zuordnen und Skriptfehler verursachen.

Ich hoffe, es hilft jemandem da draußen!

    
1owk3y 09.10.2017 10:10
quelle
0

Mit vorherigen Antworten fand ich, dass ich nur mein Problem änderte und mir erlaubte, Inhalt in der Schaltfläche zu haben. Das Styling ist praktisch das gleiche, ich habe einfach die gleichen Bootstrap-Button-Klassen und -Elemente dort gelassen und es verhält sich genauso wie zuvor. Der Tabindex ist da, weil ich eine Dropdown-Liste innerhalb der Schaltfläche verwende, so dass die Schaltfläche (jetzt div) fokussiert werden kann und in Angular ein Ereignis (Unschärfe) oder (Fokus) aufweist.

    
sivi911 05.02.2018 09:14
quelle

Tags und Links