0

我有一个下拉列表 [事件、问题、问题、任务]。当最终用户登录并有一个名为 product 的标签时,我已经编写了一个代码,默认值应该是问题。但是,它似乎不起作用。它仍然为用户提供从列表中选择值的选项。

$j(document).ready(function() {  
if(location.pathname == '/requests/new') {
var ct = currentUser.tags;

 if(ct.indexOf("product") >= 0){
 $j(document.getElementById("ticket_fields_75389").value = "Problem"); 
  }
 else {
 $j(document.getElementById("ticket_fields_75389").value = "");
 } 

 }
 })
4

1 回答 1

0

注意:这个答案是错误的。一旦我知道 OP 阅读了我的评论,我将删除它。


它仍然为用户提供从列表中选择值的选项。

好吧,当然,设置value只会改变最初选择的值。如果您想“修复” select 元素的值,以便用户无法更改它,则必须将其设为read-only。让我们坚持使用 jQuery(你所拥有的是 DOM API 和 jQuery †</sup> 的奇怪组合):

$j("#ticket_fields_75389").val("Problem").prop('readonly', true);

†:让我们仔细看看这条线

$j(document.getElementById("ticket_fields_75389").value = "Problem");

这里到底发生了什么?显然我们有一个函数调用 ( $j(...)) 并且我们传递了一些东西给它。这个“东西”是表达式的结果

document.getElementById("ticket_fields_75389").value = "Problem"

这会通过 ID 查找元素并将字符串分配给"Problem"属性value。这是一个赋值表达式。赋值表达式的结果是赋值,即"Problem"

那是传递给 的值$j(...),所以我们有$j("Problem");。由于$j引用jQuery,这将搜索所有带有标签 name Problem的元素,该标签在 HTML 中不存在。它也会返回一个 jQuery 对象,但你没有用它做任何事情。

因此,包装$j(...)是完全不必要的,甚至是错误的,即使它不会引发语法或运行时错误。

于 2013-10-03T06:55:33.300 回答