Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在HTML选择标记中查找默认选定选项?_Jquery_Html_Forms - Fatal编程技术网

Jquery 在HTML选择标记中查找默认选定选项?

Jquery 在HTML选择标记中查找默认选定选项?,jquery,html,forms,Jquery,Html,Forms,我在网上找到了清除表单的代码,但它没有选择框。使用jquery,我尝试添加代码,以便在重置表单时在选择框中选择默认选项。我认为找到默认值的唯一方法是查找所选选项的位置。然后我发现,当用户选择其他选项时,jquery不会将selected视为默认选项,而是将其视为用户选择的新选项 如何在表单中找到默认选项以便正确清除 //http://www.learningjquery.com/2007/08/clearing-form-data $.fn.clearForm = function () {

我在网上找到了清除表单的代码,但它没有选择框。使用jquery,我尝试添加代码,以便在重置表单时在选择框中选择默认选项。我认为找到默认值的唯一方法是查找所选选项的位置。然后我发现,当用户选择其他选项时,jquery不会将selected视为默认选项,而是将其视为用户选择的新选项

如何在表单中找到默认选项以便正确清除

//http://www.learningjquery.com/2007/08/clearing-form-data
$.fn.clearForm = function () {
    return this.each(function () {
        var type = this.type, tag = this.tagName.toLowerCase();
        if (tag == 'form')
            return $(':input', this).clearForm();
        if (type == 'text' || type == 'password' || tag == 'textarea')
            this.value = '';
        else if (type == 'checkbox' || type == 'radio')
            this.checked = false;
        else if (tag == 'select') {
            //alert($('option', this).size());
            alert($('option[selected]', this).val());
        }
    });
};
通常默认值是
中的第一个
,因此您可以执行以下操作:

$(this).find("option:first").attr("selected", true);
但是,如果要重置整个表单,可以使用
.reset()
调用将其重置为页面加载时的状态,如下所示:

if (tag == 'form')
  this.reset();

我不确定那是你真正想要的,但只是把它扔出去。通常本地DOM方法已经非常方便,不要忽略它们

我使用了以下代码片段来实现这一点:

$(this).val($(this).find('option[selected]').val());
选项[选定]
将获得“硬编码”选定选项(默认值)。
option:selected
相反,将获得当前选择的选项

这将适用于单选择,多选择需要不同的方法:

$(this).find('option').each(function(i, opt) {
    opt.selected = opt.defaultSelected;
});

这也适用于单选。

我发现Koraktor的答案在IE8及更低版本中不起作用。我通过迭代选项解决了这个问题,直到找到默认的选定选项:

var defaultValue;
$(this).find('option').each(function (i, o) {
  if (o.defaultSelected) {
    defaultValue = o.value;
    return;
  }
});

不太优雅,但在IE中有效。

Koraktor的答案在Chrome中也不适用,我无法使用form.reset(),因为我想重置表单的一个子集。我发现最简单的方法是在加载页面时给selects一个defaultValue,然后reset函数在:input选择器返回的所有元素上使用同一行

    $("#top1 select").each(function() {
        this.defaultValue = $(this).val();
    });

    $(".reset").click(function() {
        $('#top1 :input').each(function() {
            $(this).val(this.defaultValue);
        });
    });

我说的是,在html中,当你有一个包含5件事情的列表,并且html作者在html源代码中的一个选项中选择了要写的内容时。这可能是最后一次。最后第二项,第二项,等等。如果生成了此代码,我会内联一些JS变量以供外部JS文件使用,但不幸的是html没有生成。@acidzombie24-在这种情况下,
.reset()
看起来就像您想要的那样…它会将整个
重置为页面加载时的状态,包括最初选择的
…您的替代方法是将其存储在页面加载中,然后再还原。我不确定为什么我不能使用该功能,但它看起来像是在做我想要的事情。(如果我遇到问题,我会在这里告诉你)。如何通过jquery清除它?我用这个
$(“表单”)[0]进行了测试$(“表单”)[0]
替换为
$(this)
$(this).get()将出现错误。使用Chrome“Uncaught TypeError:Object[Object HTMLFormElement]没有方法“reset”@acidzombie24-这是一个DOM方法,所以只要
this.reset()
如果
this
是一个表单元素…希望这个例子能把它清除掉:
$(“form”).each(fuction(){this.reset();})哦,是的,这是有道理的。我不知道我被什么弄糊涂了。很好的回答,特别是问/说我不需要自己的jquery重置(或者为什么它没有提到它。我看到它有,但只是在我几乎从未读过的评论中)