2011-07-24 56 views
0

嗨谁能告诉我,为什么remove()未在下面的代码remove()方法在jQuery是不工作

$("#mydropdown_for_month").change(function(){ 
    $("#mydropdown_for_day").empty(); 
    for (var i=1; i<=31; i++) 
    {options += '<option>' + i+'</option>';} 
    $('#mydropdown_for_day').after().html(options); 

工作,我有IDS mydropdown_for_monthmydropdown_for_day两个选择框。问题是,当我点击第一个下拉列表中的任何月份时,第二个下拉列表通常会显示for循环的所有日期,正如我所提到的,但是当我再次更改从feb到四月的第二个下拉列表时,显示日期从1到31两次(当我选择四月份时,可能是第一次选择月份时为1到31,第二次时为1到31)。所以为了解决这个问题,我把下面的语句$("#mydropdown_for_day").empty();这样在每次从第一个下拉列表中选择时,第二个下拉列表的所有以前的选项都被删除但没用。

请帮我,我在哪里犯错?

+4

因为没有remove()调用? :) –

+3

在你的代码中没有'remove()'调用。 “选项”变量永远不会被声明。 'after()'不能在没有参数的情况下被调用。 –

回答

0

如果你想删除所有选项,你可以使用:

$("#mydropdown_for_day option").remove() 
+0

我已经尝试了相同的说法,但它再次在两次选择上显示两次 – mehwish

2

如果你的目标是取代目前在用新的选项选择对话框中的选项,我会做这样的:

$("#mydropdown_for_month").change(function(){ 
    var options, i; 

    options = $("#mydropdown_for_day")[0].options; 
    options.length = 0; 
    for (i = 1; i <= 31; i++) { // I'm guessing you'd want to use a different upper limit here for different months 
     options[options.length] = new Option(i, i); 
    } 
}); 

它比建立HTML字符串更直接。构造函数最多可接受四个参数:要显示的文本,值,选项是否为默认选项以及是否选中。原始select元素上的options伪数组(其实不是数组)包含选项。您可以通过分配给最后使用的索引(如上所述)的索引或通过调用其add方法(而不是像使用数组那样的push)来添加它。


更新:下面你问过

,但什么是错我的代码......哪里是错误的?

基本上,错误在于,这不是你如何添加/删除选项;因此上述。它似乎应该起作用(毕竟,这是你如何在HTML中指定它们),但根据我的经验,它不能很好地工作 - 跨浏览器。上面的作品在我见过的每个浏览器中都有。

其他具体:

  • 你叫after不带参数,这没有任何意义; after是用于在之后插入内容的东西,所以你必须说出内容是什么。因此,我不会感到惊讶。
  • 您从未声明或初始化您的options变量。
+0

但是我的代码出了什么问题......错误在哪里? – mehwish

+0

@mehwish:从根本上说,你的代码出了什么问题,现在就是你如何在选择框中添加/删除选项。另请参阅更新后的答案中的其他说明。 –

+0

我已经在我的代码中声明了选项,我忘了写。 – mehwish