jQuery повертає неправильний вибраний радіокер?

У мене є введення форми, що складається з двох радіокнопок, для одного імені, як показано нижче:

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

В рамках функції jQuery я вказую, який з них перевіряється як такий:

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

Чомусь, навіть якщо я змінив позначене поле на сторінці, якщо завжди повертає перший.

Ось повний код, для цілей ліквідації:

<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
До речі, ідентифікатори не повинні починатися з числа, тільки з алфавітним буквою.
додано Автор Blazemonger, джерело

5 Відповіді

Проблема, з якою ви входите, - це селектор is , який повертає логічне значення, а не відповідний елемент. Це означає, що ви завершите виклик val() на true/false замість перемикача.

Спробуйте використати наступний селектор у положенні

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

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

6
додано
@SatansFate Я оновив свою відповідь з прикладом скрипки, який демонструє селектор, який я рекомендував
додано Автор JaredPar, джерело
@SatansFate ваш живий зразок не має суфікса : checked у селекторі, як у моєму прикладі. Це необхідно, щоб вибрати перевірене
додано Автор JaredPar, джерело
@SatansFate ех, частина хорошого кодера робить тупу помилку. Це просто відбувається (і це не зникає з досвідом). :)
додано Автор JaredPar, джерело
Ні, це не ... Це повертає "великий палець" кожен раз. Я вже пробував це.
додано Автор SatansFate, джерело
І я оновив моє запитання з живого прикладу - pdo.elementfx.com/thumb
додано Автор SatansFate, джерело
Арг, вибачте - ще більше доказів того, що я не вирізаний для кодування. Я редагував архівну версію.
додано Автор SatansFate, джерело

Використовуйте це замість:

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

Використання is (': checked') повертає логічне значення (true/false), яке не має .val() і викликає помилку.

1
додано
Те ж саме, що і в одній проблемі? Це добре працює: jsfiddle.net/mblase75/PEWp2
додано Автор Blazemonger, джерело

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
додано

Ви також можете використовувати $ ('input [name = "type"]'). Prop ('checked'); якщо ви віддаєте перевагу.

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

0
додано
яка проблема? додав скрипку, щоб відповісти.
додано Автор jbabey, джерело
Все та ж проблема.
додано Автор SatansFate, джерело

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

Замість цього слід використовувати $ ('input [name = "type"]: checked'). Val() .

0
додано