通过点击单选按钮来清除所有选项选择条目
通过点击单选按钮来清除所有选项选择条目
整天我都在尝试解决这个问题,看起来很简单,但是有什么办法可以一次性清除(而不是删除)一组下拉选择框中的所有选择?我希望它们被设置回初始加载时的默认状态。我不能使用.reset,因为表单中还有其他需要收集的信息,但是我需要允许用户更改主意而没有任何惩罚(不需要重新填写表单)。
这个SO问题展示了如何删除选项,这不是我需要的。
这个SO问题似乎给出了答案,但是我一直无法让它工作。
而这个jQuery bug记录似乎暗示可以使用.empty()来实现,但是也不起作用。
这个SO问题列出了一堆实现我想要的功能的不同方法,我已经尝试了所有方法(参见下面的代码),但都没有成功。显然我漏掉了什么。
这里有一个包含该问题的JSFiddle。
在JSFiddle中如何查看问题:
在"Repair Status"下,点击"Repaired";会显示两个新的输入框,一个是一组单选按钮,然后是每个选项的下拉选择框。在"Category"下,选择"Part Quality",然后从下拉列表中选择任何一项。该选择现在应该显示在下拉列表中。现在点击任何其他的Category,然后再回到"Part Quality"。之前所做的选择仍然显示,而不是默认的"Select Part Quality Reason",这是我想要的。
我的尝试主要集中在"Part Quality"单选按钮上,以证明概念,但实际代码需要清除表单中除了"Reporting Department"下拉选择框之外的所有选项。最好可以使用一个通用的选择器,如$(this)
,但这不是必需的。类似这样:
$("select option:selected").each(function () { $(this).val(''); //不起作用 });
要求:
当用户选择不同的单选按钮("Category")时,所有的下拉选择框将被重置为默认状态。这样,当用户做出最终选择并点击提交时,就不会有多余的条目。当他们改变"Category"的选择时,底层代码必须保留"Reporting Department"的选择。
然后,我可以收集他们的所有选择,并将它们放入一个JSON字符串中,用于向后台代码发起AJAX调用,并将数据插入到MySQL数据库中。
无论答案使用jQuery还是纯JavaScript,我都可以使用,我都可以接受。
这里有一些尝试过但尚未解决的代码:
$("#formEvent_repair input[type='radio']").on('change', function () { //$("#select_part_quality_repair option:selected").attr("selected", false); //$("#select_part_quality_repair").find('[selected]').removeAttr("selected"); //$('#select_part_quality_repair').attr('selectedIndex', '-1'); //$('#select_part_quality_repair').val(null); $("#select_part_quality_repair").find('option:first').attr('selected','selected'); //$("select option:selected").val([]); //$("select option:selected").html(''); //$("select_part_quality_repair").html(''); $("select_part_quality_repair").append().html(''); $("select option:selected").each(function () { console.log("Emptying select options"); $("#select_part_quality_repair").find('option:first').attr('selected','selected'); //#select_part_quality_repair-button > span //$("#select_part_quality_repair").prop('selectedIndex', -1); //$("#select_part_quality_repair").find('option').attr("selected", false); //$("#select_part_quality_repair option").attr("selected", false); $("#select_part_quality_repair option:selected").attr("selected", false); console.log(this); $(this).val([]); }); });
问题出现的原因是因为用户想要清除所有的选项选择,但是使用的代码却只清除了单选按钮或者下拉菜单的选项。解决方法是修改代码,使其能够清除所有的选项选择。
修改后的代码如下:
$(".clear").click(function(){ $('input:radio').each(function () { $(this).removeAttr("checked"); }); $('select').each(function () { $(this).find('option:selected').removeAttr("selected"); }); });
以上代码会清除所有的单选按钮和下拉菜单的选项选择。
问题的出现的原因是代码中存在错误的语法和使用了不适用于jQuery Mobile的方法,导致无法清除下拉选择的选项。解决方法是对代码进行修正和添加必要的刷新操作。
首先,代码中使用了错误的语法来清除下拉选择的选项,正确的方法是使用val("")
来清除选项,示例代码如下:
$("#select_part_quality_repair").val("");
其次,代码中存在一行不正确的代码,未在元素ID前面加上#
,这是jQuery所要求的。而且这行代码本身也是无效的,可以直接忽略。修正后的代码如下:
$("#select_part_quality_repair").append().html('');
最后,由于使用了jQuery Mobile,需要在清除选项后进行刷新操作。这可以通过调用refresh()
方法来实现,示例代码如下:
$("#select_part_quality_repair").val("").selectmenu("refresh");
通过以上的修正和添加刷新操作,可以解决清除下拉选择选项的问题。