Javascript 将默认选项放入一个select中,该选项仍然可以使用jquery保留以前选择的值

Javascript 将默认选项放入一个select中,该选项仍然可以使用jquery保留以前选择的值,javascript,jquery,select,Javascript,Jquery,Select,现在还不要大喊大叫。 我在任何地方都找不到答案 我正在为我的web应用程序编写一个小插件,我希望所有的选择框都有一个禁用的默认选项:-select- 这将很容易做到,除非用户可以回来编辑他们的信息。因此,我需要检查select是否选择了一个值: if ($this.val()) { ... } else { $this.prepend(

现在还不要大喊大叫。
我在任何地方都找不到答案

我正在为我的web应用程序编写一个小插件,我希望所有的选择框都有一个禁用的默认选项:
-select-

这将很容易做到,除非用户可以回来编辑他们的信息。因此,我需要检查select是否选择了一个值:

 if ($this.val()) {
                            ...
                        } else {
                            $this.prepend("<option disabled='disabled' class='disabled'>-Select-</option>")[0].selectedIndex = 0;
                        }
if($this.val()){
...
}否则{
$this.prepend(“-Select-”)[0]。selectedIndex=0;
}
我尝试过其他解决方案,这只是一个例子


编辑:这个想法是,当他们第一次进来时,或者如果他们以前没有选择,它将默认为禁用的选择选项

浏览器本身设置默认选项(第一个)时会出现问题。那么$this.val()就有了一个值,而实际上用户还没有选择一个值

所以问题是:

如何将默认选项放入使用jquery仍然可以保留以前选择的值的select中?

我相信这就是您想要的。如果我错了,请纠正我。这将设置默认选项(第一个选项),然后在用户从下拉列表中选择实际选项时将其删除

html:

<select id="select">
    <option>Default Option</option>
    <option>Option One</option>
    <option>Option Two</option>
    <option>Option Three</option>
</select>
$('select').change(function(){
    var $defaultOpt = $(this).find('option:contains(Default Option)');
    if ($defaultOpt) { $defaultOpt.remove(); }
});
var $selectTemplate = $("<option disabled='disabled' class='disabled'>-Select-</option>");
            $this.prepend($selectTemplate);
            if ($this.filter("[userSelection]").attr("userSelection") > 0) {
                $this.val($this.attr("userSelection"));
            } else {
                $this[0].selectedIndex = 0;
            }

示例:

所以我现在要做的是为DropDownList for制作自己的HTML帮助程序

它将用户的数据库值插入select标记,然后javascript从中获取它

HtmlHelper

public static class MvcHtmlExtensions
{
    public static MvcHtmlString DropDownListFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> selectList,
        object htmlAttributes, bool userSelection)
    {
        if (userSelection == true)
        {
            object additionalAttributes = new { userSelection = expression.};

            var newHtmlAttributes = new RouteValueDictionary(htmlAttributes);
            foreach (var item in new RouteValueDictionary(additionalAttributes))
            {
                newHtmlAttributes[item.Key] = item.Value;
            }

            return Html.SelectExtensions.DropDownListFor(htmlHelper, expression, selectList, newHtmlAttributes);
        }
        else
        {
            return Html.SelectExtensions.DropDownListFor(htmlHelper, expression, selectList, htmlAttributes);
        }
    }
}
公共静态类MvcHtmlExtensions
{
公共静态MvcHtmlString DropDownListFor(此HtmlHelper HtmlHelper,
表达式,IEnumerable selectList,
对象htmlAttributes,bool userSelection)
{
if(userSelection==true)
{
对象additionalAttributes=new{userSelection=expression.};
var newHtmlAttributes=新路由值字典(htmlAttributes);
foreach(新RouteValueDictionary中的var项(附加属性))
{
newHtmlAttributes[item.Key]=item.Value;
}
返回Html.SelectExtensions.DropDownListFor(htmlHelper、表达式、selectList、newHtmlAttributes);
}
其他的
{
返回Html.SelectExtensions.DropDownListFor(htmlHelper、表达式、selectList、htmlAttributes);
}
}
}
Javascript:

<select id="select">
    <option>Default Option</option>
    <option>Option One</option>
    <option>Option Two</option>
    <option>Option Three</option>
</select>
$('select').change(function(){
    var $defaultOpt = $(this).find('option:contains(Default Option)');
    if ($defaultOpt) { $defaultOpt.remove(); }
});
var $selectTemplate = $("<option disabled='disabled' class='disabled'>-Select-</option>");
            $this.prepend($selectTemplate);
            if ($this.filter("[userSelection]").attr("userSelection") > 0) {
                $this.val($this.attr("userSelection"));
            } else {
                $this[0].selectedIndex = 0;
            }
var$selectTemplate=$(“-Select-”);
$this.prepend($selectTemplate);
if($this.filter(“[userSelection]”)attr(“userSelection”)>0){
$this.val($this.attr(“用户选择”));
}否则{
$this[0]。已选择索引=0;
}

但是用户如何知道选择了哪个选项呢?这个想法是,当他们第一次进来时,或者如果他们以前没有选择,它将默认为禁用的选择选项。您不能默认为禁用的选项,这就是为什么它被禁用的原因。如果我理解正确,你想给用户提供第一个选项的一些信息,但当用户在下拉列表中选择某个选项时,信息会消失,对吗?如果用户以前在页面上选择过该选项,我不希望它出现在页面加载上。也就是说,他们可以多次访问该页面。但是,直到他们从下拉列表中选择一个值并保存它,它才会显示为默认值(我可以默认一个禁用的选项,我以前做过)。但是如果你重新加载一个页面,它会在大多数浏览器中恢复为默认值,除非你将该信息保存在cookie或其他东西中。这不是我想要的。当它们在页面上时,我不想删除它。如果他们以前在该页面上选择了它,我想将其删除,以后再返回该页面。然后,您必须将该信息存储在某个位置。正如我所说的,一个cookie,或者一个数据库,或者类似的东西。当页面加载时,我从数据库返回它。因此,如果他们之前选择了一个选项,那么它将自动选择该选项。但我不想用javascript覆盖它,因为他们以前已经编辑过它。在这种情况下,我建议您在后端呈现默认选项,类似于
defaultoption
我明白了……那么如果
preverselopt==true,为什么不在后端用另一个类呈现它,然后在前端用JS隐藏它呢?这样就不会弄乱你的身份证。只是一个想法。。。