假设我有一个带有选项 x、y 和其他选项的单选按钮组。如果用户不想要 x 或 y,那么他们可以选择其他,这将允许他们在文本字段中输入自己的值。html代码:
<input type="radio" name="choice" id="x" value="x"/><label for="x">x</label><div></div>
<input type="radio" name="choice" id="y" value="y"/><label for="y">y</label><div></div>
<input type="radio" name="choice" id="other" value="other"/><label for="other">other </label><input type="text" id="otherText"/><span id="error"></span><div></div>
他们输入的值将被验证(它只能是一个数字)。我正在使用 jQuery 进行验证。如果用户输入了除数字之外的任何内容,那么用户将看到一条错误消息。jQuery 会改变 span#error 的 innerHtml。这是我的 jQuery 代码:
$(document).ready(function() {
$("input#otherText").attr("disabled", "disabled");
$("input:radio").click(function() {
var choice = $(this).val();
if(choice != "other") {
$("input#otherText").attr("disabled", "disabled");
console.log("Choice " + choice);
}else {
$("input#otherText").removeAttr("disabled");
}
});
$("input#otherText").blur(function() {
console.log("is Other Checked: " + $("input#other").is(":checked"));
// If some other radio button is chosen, then I don't want to validate.
if($("input#other").is(":checked")) {
$("span#error").html("");
var otherValue = $.trim(jQuery(this).val());
if(otherValue != ' ' && otherValue.length > 0) {
if(!otherValue.match(/^[0-9]+$/)) {
$("span#error").html(otherValue + " is not a number.");
$("span#error").css({"font-weight":"bold", "color":"red"});
}
}
}
});
});
验证按预期工作,但我的问题是决定何时验证。当用户在文本字段中输入一个值并单击或跳出时,上面的代码会进行验证。这意味着即使选择了其他一些无线电(例如 x 或 y),也会进行验证。所以我将 .is(":checked") 添加到 other 中,尽管选择了另一个收音机,但它返回 true。为什么即使未单击“其他”评估为真?有人可以对此有所了解吗?
这是我在小提琴中的代码:http: //jsfiddle.net/9Zycy/
谢谢你。