Wykonuję następujące czynności:
<a href="www.stackoverflow.com">
<button disabled="disabled" >ABC</button>
</a>
Działa to dobrze, ale pojawia się błąd walidacji HTML5, który mówi, że „przycisk elementu” nie może być zagnieżdżony w elemencie „przycisk”.
Czy ktoś może mi doradzić, co powinienem zrobić?
Odpowiedzi:
Nie , to nie jest poprawny HTML5 zgodnie z dokumentem specyfikacji HTML5 od W3C :
Innymi słowy, możesz zagnieżdżać dowolne elementy wewnątrz z
<a>
wyjątkiem następujących:<a>
<audio>
(jeśli atrybut controls jest obecny)<button>
<details>
<embed>
<iframe>
<img>
(jeśli atrybut usemap jest obecny)<input>
(jeśli atrybut typu nie jest w stanie ukrytym )<keygen>
<label>
<menu>
(jeśli atrybut typu jest w stanie paska narzędzi )<object>
(jeśli atrybut usemap jest obecny)<select>
<textarea>
<video>
(jeśli atrybut controls jest obecny)Jeśli chcesz mieć przycisk, który prowadzi do jakiegoś miejsca, zawiń ten przycisk wewnątrz
<form>
tagu jako takiego:Jeśli jednak Twój
<button>
tag jest stylizowany za pomocą CSS i nie wygląda jak widżet systemu ... Zrób sobie przysługę, utwórz nową klasę dla swojego<a>
tagu i nadaj jej styl w ten sam sposób.źródło
<div>
inside an<a>
jest absolutnie poprawny w HTML5: validator.w3.org/nu/…Jeśli używasz Bootstrap 3 , działa to całkiem dobrze
źródło
Nie.
Poniższe rozwiązanie opiera się na JavaScript.
Jeśli przycisk ma być umieszczony wewnątrz istniejącego
<form>
zmethod="post"
, upewnij się, że przycisk ma atrybut, wtype="button"
przeciwnym razie przycisk wyśle operację POST. W ten sposób możesz mieć plik<form>
zawierający kombinację przycisków operacji GET i POST.źródło
<a>
wewnątrz<button>
(z tym samymhref
) jako kopię zapasową, jeśli JS jest wyłączony, i za sześć miesięcy od teraz na pewno będę zawstydzony, że to przyznałem.Właśnie wskoczyłem do tego samego problemu i rozwiązałem go, zastępując tag „button” tagiem „span”. W moim przypadku używam bootstrap. Tak to wygląda:
źródło
<a>
, która jest częścią linku, ale nie ma stylu podobnego do przycisku. Na przykład każde kliknięcie wdiv
(obrazie, tle, tekście itp.) Prowadzi do łącza, ale tylko elementspan
wygląda jak przycisk.Byłoby naprawdę dziwne, gdyby to było ważne i spodziewałbym się, że będzie nieważne. Co powinno oznaczać umieszczenie jednego klikalnego elementu wewnątrz innego klikalnego elementu? Co to jest - przycisk czy link?
źródło
border: 2px outset
. Jeśli chcesz trochę zaokrąglić rogi, możesz również użyć na nim border-radius . Prosty<img>
tag też się sprawdzi.Inną opcją jest użycie atrybutu onclick przycisku:
To działa, jednak użytkownik nie zobaczy linku wyświetlanego po najechaniu kursorem, tak jak gdyby znajdował się wewnątrz elementu.
źródło
Obecnie, nawet jeśli specyfikacja na to nie zezwala, „wydaje się”, że nadal działa osadzanie przycisku w
<a href...><button ...></a>
tagu, FWIW ...źródło
<button>
plik nie jest zawarty w pliku<form>
. Jednak gdy tylko przycisk jest zawarty (np.<form>...<a><button>
), Przestaje działać, chyba że wyłącza się obsługę przycisku po kliknięciu. To wystarczy, aby uniknąć tego scenariusza.Możesz dodać klasę do przycisku i umieścić skrypt przekierowujący go.
Robię to w ten sposób:
źródło
dlaczego nie… możesz również osadzić zdjęcie na przycisku
źródło
Wyjaśnienie i rozwiązanie robocze tutaj: Howto: div z onclick wewnątrz innego div z javascript onclick
wykonując ten skrypt w wewnętrznej obsłudze kliknięcia:
źródło
W HTML5 osadzanie przycisku w linku jest nielegalne.
Lepiej używać CSS w stanach domyślnych i: active (wciśnięty):
źródło
Próbuję twoich rozwiązań javascript, ale do pracy muszę wstawić
e.preventDefault();
w mojej funkcji javascript.źródło
Użyj atrybutu formaction wewnątrz przycisku
PS! Działa tylko wtedy, gdy typ przycisku = "wyślij"
źródło
źródło