jQuery retourneert de verkeerde geselecteerde radiobox?

Ik heb een formulierinvoer die bestaat uit twee radiobuttons, voor één naam, zoals hieronder:

 
<input type="radio" name="type" value="thumb" checked />
<input type="radio" name="type" value="img" />

Binnen een jQuery-functie verwijs ik naar welke als zodanig wordt gecontroleerd:

type=$('input[name="type"]').is(':checked').val();

Om de een of andere reden, zelfs als ik het aangevinkte vakje op de pagina heb veranderd, als altijd de eerste terug.

Hier is de volledige code, voor eliminatie:

<html>
<head>
<title>Thumb/img BBCode generator</title>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
<meta http-equiv="Content-Style-Type" content="text/css" />
<link href="style.css" rel="stylesheet" type="text/css" />

</head>
<body>

Thumb/img BBCode generator for Facepunch

<div id="content">
<form id="f" action="generate2.php" method="POST">
 
<input type="radio" name="type" value="thumb" checked />
<input type="radio" name="type" value="img" />

<input type="button" value="Generate!" id="1_c"/> </form> </div> <script> $('#1_c').click(function(){ var text=$('textarea').val(), type=$('input[name="type"]').is(':checked').val(); $.post('generate2.php', { text: text, type: type }, function(data) { $("#content").html(data); }); }); function reset(){ history.go('0'); } </script> </body>

Live version: http://pdo.elementfx.com/thumb/

2
Overigens mogen ID's niet met een cijfer beginnen, alleen met een alfabetische letter.
toegevoegd de auteur Blazemonger, de bron

5 antwoord

Het probleem dat je tegenkomt, is dat de is selector een Booleaanse waarde retourneert en niet het overeenkomende element. Dit betekent dat u uiteindelijk val() op waar/onwaar aanroept in plaats van het keuzerondje.

Probeer de volgende selector intstead te gebruiken

type=$('input[name="type"]:checked').val()

Fiddle: http://jsfiddle.net/fP2P4/1/

6
toegevoegd
@SatansFate Ik heb mijn antwoord bijgewerkt met een fiddle-voorbeeld dat de selector demonstreert die ik heb aanbevolen
toegevoegd de auteur JaredPar, de bron
@SatansFate uw live voorbeeld heeft niet het : checked achtervoegsel op de selector zoals mijn voorbeeld doet. Dit is nodig om de gecontroleerde te kiezen
toegevoegd de auteur JaredPar, de bron
@SatansFate eh, onderdeel van een goede codeur is het maken van domme fouten als dat. Het gebeurt gewoon (en het gaat niet weg met ervaring). :)
toegevoegd de auteur JaredPar, de bron
Nee het is niet ... Het geeft elke keer "duim" terug. Dat heb ik al geprobeerd.
toegevoegd de auteur SatansFate, de bron
En ik heb mijn vraag bijgewerkt met een levend voorbeeld - pdo.elementfx.com/thumb
toegevoegd de auteur SatansFate, de bron
Argh, het spijt me - maar nog meer bewijs dat ik niet uitgekeken ben voor het coderen. Ik was de gearchiveerde versie aan het bewerken.
toegevoegd de auteur SatansFate, de bron

Gebruik dit in plaats daarvan:

type = $('input[name="type"]:checked').val();

Het gebruik van is (': checked') retourneert een Booleaanse waarde (waar/onwaar), die geen .val() heeft en een fout veroorzaakt.

1
toegevoegd
Hetzelfde als in hetzelfde probleem? Dit werkt prima: jsfiddle.net/mblase75/PEWp2
toegevoegd de auteur Blazemonger, de bron

is(':checked') returns true if the element is checked. You don't want it to return true or false, you want to select the element that is checked, so use

type = $('input[name="type"]:checked').val();
1
toegevoegd

Je zou ook $ ('input [name = "type"]'). Prop ('checked') kunnen gebruiken; als je dat liever hebt.

edit: http://jsfiddle.net/pVhn8/

0
toegevoegd
welk probleem? Fiddle toegevoegd om te beantwoorden.
toegevoegd de auteur jbabey, de bron
Nog steeds hetzelfde probleem.
toegevoegd de auteur SatansFate, de bron

The is() method returns a Boolean so it's not clear how you got this statement to work: $('input[name="type"]').is(':checked').val();

Gebruik in plaats daarvan $ ('input [name = "type"]: checked'). Val() .

0
toegevoegd