2011-03-20 72 views
0

前段时间我张贴了这个问题,询问如何获取JSON数据到jQuery的下拉菜单 jquery dropdown from mysql based on previous selectionjQuery的空()阻止选择

那么这里的人是真棒,我得到了一个解决方案。我现在面临的问题是,建议的解决方案在我的生产环境中不起作用,但它在我的测试中有效。

为了防止重复主题我使用jQuery empty()问题是,使用empty()似乎也阻止我选择第一个选项。

这是从JSON

function(data){ 

      var select = $('[name="employee_manager"]'); 
      select.empty(); 
      select.append(new Option(ucfirst('No Manager'),'100')); 

      $.each(data, function(index, array) { 

        select.append(new Option(ucfirst(array['first_name'])+ " "+ucfirst(array['last_name']),array['id'])); 
      }); 

生成optiosn的功能是一种替代空的(),将不能防止选择?

编辑这似乎仅是一个问题,如果有少于两个项目是动态输入
EDIT 2这里是HTML。看来,我无法选择第一个选项,如果empty()存在

 <label for="manager">Reports To</label> 
    <select name="employee_manager"> 
      <option value="1">Please Select Employee Role</option> 
      <option value="2">John Doe</option> 
      <option value="3">James Smith</option> 
    </select> 

编辑3

貌似空类是添加一个跨度来我选择

<div class="selector"> 
<span style="-moz-user-select: none;">Jane Smith</span> 
    <select name="employee_manager" style="opacity: 0;"> 
     <option value="100">No Manager</option> 
</select> 
</div> 

编辑4
好吧,所以这里是一个jsfiddle显示问题。我无法正确加载JSON数据,但如果您尝试点击列表中的第一项,仍然可以看到问题。看来,仿佛均匀去除它不是一个问题 http://jsfiddle.net/BandonRandon/xXUfp/1/

+1

你所说的 '选择' 意思?我的代码中没有看到“选择”一个元素。 – Kevin 2011-03-20 07:55:43

+0

对不起,我更新了问题,以包括正在做选择的HTML。 – BandonRandon 2011-03-20 08:14:24

+0

看起来像'data'是ajax响应,什么类型是'data'? JSON? – 2011-03-20 08:19:56

回答

5

不要使用empty()明确的下拉列表中的选项它与uniformjs问题。这是错误的,因为它应该被用来删除DOM孩子。

而是使用这样的代码:

$("select[name='employee_manager'] > option").remove(); 

编辑:当使用了jQuery插件uniform,动态添加选项是搞乱事情了......周围的一个方法,不需要去尝试修复插件总是要有足够的“虚拟”选项(例如,如果这是最大选项数量,则为20),然后根据您的数据更改这些选项的文本/值并隐藏所有其他选项。
正确的JS代码现在看起来像这样:

var myData = []; 
myData.push({ text: "Please Select A Manager (JS)", value: "null" }); 
myData.push({ text: "No Manager", value: "100" }); 
myData.push({ text: ucfirst("a third choice"), value: "42" }); 
$.each(data, function(index, array) { 
    myData.push({ text: ucfirst(array['first_name'])+ " " + ucfirst(array['last_name']), value: array['id'] }); 
}); 

$("select[name='employee_manager'] > option").each(function(index) { 
    if (index < myData.length) { 
     $(this).text(myData[index]["text"]); 
     $(this).val(myData[index]["value"]);       
     $(this).show(); 
    } 
    else { 
     $(this).hide(); 
    } 
}); 

更新jsFiddle

原油,但工作.... :)

+0

由于某些原因,我的移除存在同样的问题。我认为这是一个CSS问题。我将选中的类添加到跨度。请参阅上面的编辑3。 – BandonRandon 2011-03-20 08:37:56

+1

@BrandonRandon以及别忘了检查萤火虫 – 2011-03-20 08:39:54

+0

@experimentX我正在检查萤火虫,这是我如何认为它是增加跨度。没有JS错误。不知道还有什么需要寻找或为什么要添加跨度。 – BandonRandon 2011-03-20 08:41:02

0

那么尝试这样的事情,但不保证一定

$('<option></option>').val(100).html('No Manager').appendTo($(select)); 

$.each(data, function(index, array) { 
    $('<option></option>').val(array['id']).html(ucfirst(array['first_name'])+ " "+ucfirst(array['last_name']).appendTo($(select)); 
}); 
+0

这仍然是重复所有字段。你也忘了''',但我解决了这个问题。 PS,它是“BandonRandon”而不是“BRandonRadon”:) – BandonRandon 2011-03-20 08:46:46

+0

@BandonRandon对不起,因为我没有测试过它。祝你好运...哎呀!必须再次编辑。 – 2011-03-20 08:49:22