使用 Jquery 取消选中单选按钮
Unchecking a radio button with Jquery
我有几个 RadioButtonFor
(剃刀),我正在尝试制作一个 JQuery 脚本,当您选中另一个按钮时取消选中其他按钮。
我有一个模型,其中包含要传递给 Html 助手和打印机名称的布尔数组:
public class Mymodel
{
public List<PrinterModel> printers { get; set; }
public bool noDefault { get; set; }
}
我的PrinterModel
如下:
public class Printermodel
{
public bool selected { get; set; }
public string printerName { get; set; }
}
然后在我看来,:
@using (Html.BeginForm()
{
<div class="form-group">
for (var i = 0; i < Model.printers.Count(); i++)
{
@Html.RadioButtonFor(m => m.printers[i].selected, new { @class = "default" });
@Html.Label(Model.printers[i].printerName);
<br/>
}
@Html.RadioButtonFor(m=>m.noDefaultRadio, new { @class = "noDefault", @checked= "checked" });
@Html.Label("No default printer");
</div>
}
我知道我可以在 JQuery 中使用 .prop('checked', false)
取消选中单选框,所以我在第一次播放时尝试取消选中默认按钮 :
$('.default').change(function () {
if ($('.default:checked').length > 0) {
$('.noDefault').prop('checked', false);
}
else {
$('.noDefault').prop('checked', true);
}
});
这什么都不做,但对复选框有效,为什么?
还有,@checked="checked"
默认不勾选RadioButtonFor
,我也试过@checked = true
也不工作。
有什么想法吗?
EDIT 当尝试按照建议使用 name="default"
时,我在导航器中检查页面时看到以下输入:
<input data-val="true" id="printers_0__primarySelected" name="printers[0].primarySelected" type="radio" value="{ disabled = disabled }"
使用 click
而不是 change
事件,因为一旦选中无线电 change
事件将不会再次触发。
$('.default').click(function () {
if ($('.default:checked').length > 0) {
$('.noDefault').prop('checked', false);
}
else {
$('.noDefault').prop('checked', false);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Check .default <input type="radio" name="one" class="default" /> <br/>
Check .noDefault <input type="radio" name="two" class="noDefault" checked /> <br/>
你能把单选按钮做成一个组吗?您尝试执行的操作听起来像是默认行为。
您能否将 name = "printerGroup"
(或类似的)添加到 RadioButtonFor 调用中的 HTML 属性以将它们组合在一起?
更新:
退一步说,听起来您想要选择 1 个单选按钮。您应该希望在提交后将 selectedId 或某些标识符传回您的控制器。我希望进行以下更改。
型号
public class PrinterModel
{
public int Id { get; set; }
public string printerName { get; set; }
}
public class MyModel
{
public List<PrinterModel> printers { get; set; } = new List<PrinterModel>();
public string selectedId { get; set; } //This will be the id of what gets selected
}
查看
@using (Html.BeginForm())
{
<div class="form-group">
@for (var i = 0; i < Model.printers.Count; i++)
{
@Html.RadioButtonFor(m => Model.selectedId, Model.printers[i].Id, new { name = "test" });
@Html.Label(Model.printers[i].printerName);
<br />
}
@Html.RadioButtonFor(m => Model.selectedId, "0", new { name = "test" })
@Html.Label("No default printer")
</div>
}
在您的控制器中,您可以获取 selectedId 并对其进行处理,如果传入 0,则默认为 0(根据需要更改)。
我有几个 RadioButtonFor
(剃刀),我正在尝试制作一个 JQuery 脚本,当您选中另一个按钮时取消选中其他按钮。
我有一个模型,其中包含要传递给 Html 助手和打印机名称的布尔数组:
public class Mymodel
{
public List<PrinterModel> printers { get; set; }
public bool noDefault { get; set; }
}
我的PrinterModel
如下:
public class Printermodel
{
public bool selected { get; set; }
public string printerName { get; set; }
}
然后在我看来,:
@using (Html.BeginForm()
{
<div class="form-group">
for (var i = 0; i < Model.printers.Count(); i++)
{
@Html.RadioButtonFor(m => m.printers[i].selected, new { @class = "default" });
@Html.Label(Model.printers[i].printerName);
<br/>
}
@Html.RadioButtonFor(m=>m.noDefaultRadio, new { @class = "noDefault", @checked= "checked" });
@Html.Label("No default printer");
</div>
}
我知道我可以在 JQuery 中使用 .prop('checked', false)
取消选中单选框,所以我在第一次播放时尝试取消选中默认按钮 :
$('.default').change(function () {
if ($('.default:checked').length > 0) {
$('.noDefault').prop('checked', false);
}
else {
$('.noDefault').prop('checked', true);
}
});
这什么都不做,但对复选框有效,为什么?
还有,@checked="checked"
默认不勾选RadioButtonFor
,我也试过@checked = true
也不工作。
有什么想法吗?
EDIT 当尝试按照建议使用 name="default"
时,我在导航器中检查页面时看到以下输入:
<input data-val="true" id="printers_0__primarySelected" name="printers[0].primarySelected" type="radio" value="{ disabled = disabled }"
使用 click
而不是 change
事件,因为一旦选中无线电 change
事件将不会再次触发。
$('.default').click(function () {
if ($('.default:checked').length > 0) {
$('.noDefault').prop('checked', false);
}
else {
$('.noDefault').prop('checked', false);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Check .default <input type="radio" name="one" class="default" /> <br/>
Check .noDefault <input type="radio" name="two" class="noDefault" checked /> <br/>
你能把单选按钮做成一个组吗?您尝试执行的操作听起来像是默认行为。
您能否将 name = "printerGroup"
(或类似的)添加到 RadioButtonFor 调用中的 HTML 属性以将它们组合在一起?
更新:
退一步说,听起来您想要选择 1 个单选按钮。您应该希望在提交后将 selectedId 或某些标识符传回您的控制器。我希望进行以下更改。
型号
public class PrinterModel
{
public int Id { get; set; }
public string printerName { get; set; }
}
public class MyModel
{
public List<PrinterModel> printers { get; set; } = new List<PrinterModel>();
public string selectedId { get; set; } //This will be the id of what gets selected
}
查看
@using (Html.BeginForm())
{
<div class="form-group">
@for (var i = 0; i < Model.printers.Count; i++)
{
@Html.RadioButtonFor(m => Model.selectedId, Model.printers[i].Id, new { name = "test" });
@Html.Label(Model.printers[i].printerName);
<br />
}
@Html.RadioButtonFor(m => Model.selectedId, "0", new { name = "test" })
@Html.Label("No default printer")
</div>
}
在您的控制器中,您可以获取 selectedId 并对其进行处理,如果传入 0,则默认为 0(根据需要更改)。