C# JavasScript:如何防止用户在不使用禁用/指针事件的情况下选择选择选项列表中的任何内容?

C# JavasScript:如何防止用户在不使用禁用/指针事件的情况下选择选择选项列表中的任何内容?,c#,javascript,jquery,asp.net-mvc-3,C#,Javascript,Jquery,Asp.net Mvc 3,我试图阻止用户选择所选值以外的任何其他值。因为我的公司比较老而且弱智,所以他们使用IE9,而我使用的是MVC3/c。因此,我希望视图将预先选择的值发送回控制器,并防止用户更改该值。我已经尝试过/pointer\u events\u polyfill.js,但它不适用于让IE9使用指针事件 <select id="abc"> <option value="volvo">Volvo</option> <option value="saab" selected

我试图阻止用户选择所选值以外的任何其他值。因为我的公司比较老而且弱智,所以他们使用IE9,而我使用的是MVC3/c。因此,我希望视图将预先选择的值发送回控制器,并防止用户更改该值。我已经尝试过/pointer\u events\u polyfill.js,但它不适用于让IE9使用指针事件

<select id="abc">
<option value="volvo">Volvo</option>
<option value="saab" selected>Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
是否有javascript函数或类可用于防止用户更改预选值

您只需将禁用属性设置为选择:

 <select id="abc" disabled>
    <option value="volvo">Volvo</option>
    <option value="saab" selected>Saab</option>
    <option value="fiat">Fiat</option>
    <option value="audi">Audi</option>
  </select>

请参阅:

有很多方法可以做到这一点。从可用性的角度来看,最好只是向用户显示预选的值,而不是试图将其表示为输入。输入告诉用户他们可以选择,而你基本上是说你已经为他们选择了。其他选择包括:

从“选择”菜单中删除除所需选项之外的所有选项

禁用选择

响应更改事件,并在用户每次更改时将select的值设置回其动态计算的值

$('#abc').change(function() {$(this).val('saab');});

但是,无论您决定如何向用户表示这一点,您都不能依赖客户端代码来强制执行他们的选择。提交表单时,服务器需要根据用户所做的其他选择计算所需的值。否则,精明的用户将能够破解提交的值。

为其他选项设置禁用属性是否有理由将其作为选择列表呈现给用户?为什么不向他们显示您已经为他们选择的文本?我需要能够动态地设置它-根据用户的组,他们不应该能够更改预先选择的值。@user2089039:动态地,这意味着您正在使用javascript来选择它?您的javascript不能像更改select的值一样轻松地更改span的文本吗?在客户端,您不能阻止任何事情,必须在服务器端验证数据。我不能使用disabled-主要是因为MVC3返回空值。我只需要一些javascript魔法来阻止用户更改所选值。@user2089039:如果没有值发送到服务器,这应该无关紧要。正如我在回答中提到的,您的服务器需要自己计算这个值,动态地显示它,因为用户做出的选择是一个不错的额外选择,但是你不能依靠javascript技巧来阻止他们选择错误的值。@user2089039如果你正在搜索javascript黑客,那么这里有一个:document.getElementByIdabc.setAttributedisabled,disabled;或者禁用所有选项:$abc.children.propdisabled,true;你能给我举一个例子,你删除了所有其他未选中的选项吗?即预选。在上面的例子中,既然选择了萨博,我如何删除除萨博之外的所有其他选项thanks@user2089039:当然,我添加了几个代码片段,您可以看到at和$'abc'.changefunction{$this.val'saab';}的示例-这太完美了!但是,有没有一种方法可以动态识别“saab”而不是使用文字?@user2089039:当然,可以使用变量或调用函数。你可能有一些代码在第一时间设置这个值,对吗?因此,您可以将此代码放在那里,并使用相同的值。但让我重申,这不是一个理想的解决办法。看到下拉列表,然后让您选择的选项实际上没有被选中,这是一种可怕的用户体验。也许:有没有办法循环浏览每个选项并删除那些未被选中的选项项?
$('#abc').change(function() {$(this).val('saab');});