#jquery #button #radio
#jquery #переключатель
Вопрос:
У меня есть форма ввода, состоящая из двух радиокнопок, для одного имени, как показано ниже:
<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();
По какой-то причине, даже если я изменил флажок на странице, if всегда возвращает прежний.
Вот полный код для целей устранения:
<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 /
Комментарии:
1. Кстати, идентификаторы не должны начинаться с цифры, только с буквы алфавита.
Ответ №1:
Проблема, с которой вы сталкиваетесь, заключается is
в том, что селектор возвращает логическое значение, а не соответствующий элемент. Это означает, что в конечном итоге вы вызываете val()
on true / false
вместо переключателя.
Попробуйте использовать следующий селектор intstead
type=$('input[name="type"]:checked').val()
Скрипка: http://jsfiddle.net/fP2P4/1 /
Комментарии:
1. Нет, это not…It возвращает «большой палец» каждый раз. Я уже пробовал это.
2. @SatansFate Я обновил свой ответ примером скрипки, который демонстрирует селектор, который я рекомендовал
3. И я обновил свой вопрос живым примером — pdo.elementfx.com/thumb
4. @SatansFate в вашем живом сэмпле нет
:checked
суффикса в селекторе, как в моем примере. Это необходимо для выбора отмеченного5. @SatansFate эх, быть хорошим программистом — это делать такие глупые ошибки. Это просто случается (и это не проходит с опытом). 🙂
Ответ №2:
Используйте это вместо:
type = $('input[name="type"]:checked').val();
Использование is(':checked')
возвращает логическое значение (true / false), которое не имеет .val()
и вызывает ошибку.
Ответ №3:
is(':checked')
возвращает true, если элемент отмечен. Вы не хотите, чтобы он возвращал true или false, вы хотите выбрать элемент, который отмечен, поэтому используйте
type = $('input[name="type"]:checked').val();
Ответ №4:
Метод is() возвращает логическое значение, поэтому неясно, как вы заставили это утверждение работать: $('input[name="type"]').is(':checked').val();
Вместо этого вы должны использовать $('input[name="type"]:checked').val()
.
Ответ №5:
Вы также можете использовать $(‘input[name=»type»]’).prop(‘проверено’); если вы предпочитаете.
редактировать: http://jsfiddle.net/pVhn8 /
Комментарии:
1. в чем проблема? добавлена скрипка для ответа.