2015-10-07 48 views
0

我正在开发一个MVC c#项目。我是新来的jQuery和会喜欢它,如果你们能借一些想法,以什么错在这里去..当条件成立时使用JQuery启用Dropdownlist

我有两个下拉列表:

  @Html.DropDownList("year", new SelectList(SomeModel.SomeHelper.SomeMethod()), "All", new {@class = "dropDown"}) 

      @Html.DropDownList("month", new SelectList(new[] 
      { 
       new {ID = "1", Name = "January"}, 
       new {ID = "2", Name = "February"}, 


      }, "ID", "Name"),"All", new {@class = "dropDown", @disabled = "disabled"}) 

注:大多数月份的目的

删除

年份列表将始终启用。但是,月份列表仅在从年份列表中选择一个值时才能启用。所以我写了这个jQuery的正常工作:

$(document).ready(function() 
{ 
    var yearDropdown = $("#year"); 
    var monthDropdown = $("#month"); 

    yearDropdown.on('change', function (sender, arg) { 
     var newVal = $(this).val(); 
     monthDropdown.removeAttr('disabled', newVal !== 0); 
    }); 

}); 

不过,现在..当我不想被选择的年份(我回到“所有”在今年的榜单中选择),仍处于启用状态月份列表。

编辑:年份列表包含像“2010”,“2011”等数值。等等。当年份列表选择“全部”时,我想禁用月份列表。选择一年后,我希望启用月份列表。

因此我写了这个:

$(document).ready(function() { 
     var monthDropdown = $("#month"); 
     var yearDropdown = $("#year"); 

     yearDropdown.on('change', function (sender, arg) { 
      if ($(yearDropdown) == "All") { 
       $("#monthDropdown").prop("disabled", false); 
      } 
     }); 
    }); 

没有工作..(这意味着什么都没有发生过),我不知道这是做它甚至以正确的方式。截至目前为止:只有从年份列表中选择月份列表。没有更多..

任何指导? :)

UPDATE:

与所有那些谁评论的指导下,我成功地编写终于研究出一个jQuery:现在

$(document).ready(function() { 
     var yearDropdown = $("#year"); 
     var monthDropdown = $("#month"); 

     yearDropdown.on('change', function() { 
      var newVal = $("#year").val(); 
      if (newVal === "") { 
       monthDropdown.prop('disabled', !this.selectedIndex); 
      } 
      else { 
       monthDropdown.prop('enabled', !this.selectedIndex); 
      } 
     }); 

    }); 

也对我有更好的理解的jQuery :)虽然我标记一个答案作为答案,评论真的数过!

+0

'全部'是选项文本还是值?如果价值,'0'的目的是什么?仅供参考,值不是数字,而是一个字符串,removeAttr()jq方法不接受布尔参数,并且jq对象总是在js中真实。这在代码中会导致很多错误。在您的问题中发布相关的HTML标记会使您的问题在几秒钟内得到解决...... –

+0

“所有”是默认值我在每个列表
@Html.DropDownList("year", new SelectList(SomeModel.SomeHelper.SomeMethod()), "All", new {@class = "dropDown"}) 我没有为它设置的值设置..因为我还没有完全确定它是如何工作。但我能够从控制器中的这个列表中检索值,当所有选择我使用小于0来识别它。
另外..你是什么意思相关的HTML标记? – Tsar

+0

Jquery是客户端语言。它用于浏览器。您已经发布了服务器端代码,您应该在浏览器呈现它时发布相关的选定元素HTML标记。现在很容易理解什么是从您的服务器端代码的HTML呈现,但因为我不是一个ASP人,这就要求我头脑猛冲...... :) –

回答

1

随着$(yearDropdown)你jQuery的元素(包装DOM元素)。

使用$(yearDropdown).val()获得实际值!

+0

尝试用if($(yearDropdown).val ==“All”)和if($(yearDropdown).val <0)..没有更改 – Tsar

+0

使用.val()no .val – Alberto

+0

标记为答案,因为您有=(“#年”)。val();部分权利一直:) – Tsar

1

而是使用.prop()

monthDropdown.prop('disabled', newVal != 0); 

,你必须检查的值:

yearDropdown.on('change', function (sender, arg) { 
    if (yearDropdown.val() == "All") { // use `.val()` to check the value 
     $("#monthDropdown").prop("disabled", false); 
    } 
}); 

yearDropdown.on('change', function (sender, arg) { 
    $("#monthDropdown").prop("disabled", this.value == "All"); 
}); 
+0

它也没有带来任何变化.. – Tsar

+0

_when我不想要选择年份(我回去选择年份列表中的'全部'),月份列表仍然启用._这是一个有点混乱 – Jai

+0

我想它应该是'newVal!==“0” '或'newVal!= 0' –

相关问题