JQuery возвращает неправильно выбранный радиобокс? - PullRequest
2 голосов
/ 27 октября 2011

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

<label for="thumb">[thumb]</label> 
<input type="radio" name="type" value="thumb" checked />
<label for="img">[img]</label><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" />
<noscript>Please enable Javascript or use the <a href='index2.php'>old generator</a></noscript>
</head>
<body>
<h2>Thumb/img BBCode generator for Facepunch</h2>
<div id="content">
<form id="f" action="generate2.php" method="POST">
<label for="thumb">[thumb]</label> 
<input type="radio" name="type" value="thumb" checked />
<label for="img">[img]</label><input type="radio" name="type" value="img" /><br />
<textarea rows="30" cols="40" name="text">Insert image links on seperate lines</textarea><br />
<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>

Живая версия: http://pdo.elementfx.com/thumb/

Ответы [ 5 ]

6 голосов
/ 27 октября 2011

Проблема, с которой вы сталкиваетесь, заключается в том, что селектор is возвращает логическое значение, а не соответствующий элемент. Это означает, что в итоге вы звоните val() на true / false вместо переключателя.

Попробуйте использовать следующий селектор

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

Скрипка: http://jsfiddle.net/fP2P4/1/

1 голос
/ 27 октября 2011

is(':checked') возвращает true, если элемент отмечен. Вы не хотите, чтобы он возвращал true или false, вы хотите выбрать проверяемый элемент, поэтому используйте

type = $('input[name="type"]:checked').val();
1 голос
/ 27 октября 2011

Используйте это вместо:

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

Использование is(':checked') возвращает логическое значение (true / false), которое не имеет .val() и вызывает ошибку.

0 голосов
/ 27 октября 2011

Метод is () возвращает логическое значение, поэтому неясно, как этот оператор работает: $('input[name="type"]').is(':checked').val();

Вместо него следует использовать $('input[name="type"]:checked').val().

0 голосов
/ 27 октября 2011

Вы также можете использовать $ ('input [name = "type"]'). Prop ('флажок'); если вы предпочитаете.

редактировать: http://jsfiddle.net/pVhn8/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...