加载selectlist(而不是文档)时,在JQuery中用json数据填充selectlist
我在表单上有一个按钮,该按钮动态生成一个选择列表,该列表应该填充json数据,所有json数据都被正确拉入我唯一的问题是挂接selectlist的onload事件以填充数据,我知道我可以使用$'itemID'。fillSelectlist来填充它,但问题是我的选择列表ID是动态生成的,我不知道有什么方法可以像$item+itemNum+列表那样连接选择 我目前的代码如下:加载selectlist(而不是文档)时,在JQuery中用json数据填充selectlist,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我在表单上有一个按钮,该按钮动态生成一个选择列表,该列表应该填充json数据,所有json数据都被正确拉入我唯一的问题是挂接selectlist的onload事件以填充数据,我知道我可以使用$'itemID'。fillSelectlist来填充它,但问题是我的选择列表ID是动态生成的,我不知道有什么方法可以像$item+itemNum+列表那样连接选择 我目前的代码如下: $.fn.fillSelect = function(data) { return this.clearSelect().e
$.fn.fillSelect = function(data) {
return this.clearSelect().each(function() {
if (this.tagName == 'SELECT') {
var dropdownList = this;
$.each(data, function(index, optionData) {
var option = new Option(optionData.Text, optionData.Value);
if ($.browser.msie) {
dropdownList.add(option);
}
else {
dropdownList.add(option, null);
}
});
}
});
}
我试图将其连接到加载的选择列表,如下所示:
$.fn.FillDDL = function() {
$.getJSON("/Controller/GetFileCategories", null, function(data) {
this.fillSelect(data);
});
<select id="file1Category" name="file1Category" class="form_input_small" onload="fillDDL"></select>
有什么建议吗
编辑:我的选择列表以html形式注入页面,存储在带有onload=fillDDL值的jquery脚本中,但如果我将脚本设置为执行$'file1Category'。则它们在出现时不会触发。fillDDL在我的文档中。ready script会触发,但会出错,所以我想我正在扩展我的问题,包括为什么onload不起作用,以及我是否应该使用另一种方法
EDIT2:我的字段正在添加到表单中,如下所示:
$('#moreFiles').click(function() {
$("<div class='form_row'>" +
"<div id='file" + FileCount + "row'>" +
"<input type='button' class='form_input_small delete' value='X' onclick=\"$('#file" + FileCount + "row').empty()\" />" +
"<label for='file" + FileCount + "File' class='form_label_small'>File</label>" +
"<input type='file' class='form_input_small' name='file" + FileCount + "File' id='file" + FileCount + "File' />" +
"<label for='file" + FileCount + "Category' class='form_label_small'>Category</label>" +
"<select id='file" + FileCount + "Category' name='file" + FileCount + "Category' class='form_input_small'></select>" +
"</div></div><br class='clear' />")
.hide()
.appendTo($('#fileDiv'))
.fadeIn('fast');
FileCount++;
});
看来你的资本化可能被取消了
$.fn.FillDDL
vs
您也可以这样做:
<script type="text/javascript">
$().ready(function() {
$('#file1Category').FillDDL();
});
</script>
编辑:哎呀。重写并修复
而且,这类事情还有一个解决方案
编辑:您必须将$select替换为仅选择所需列表的选择器 如果您的数据如下所示:
var data = [{"Text":"file1","Value":1},{"Text":"file2","Value":2}];
然后:
然后在您的点击处理程序中可以放置
"<select>" + str + "</select>";
可能需要编写window[str]而不是str,这样它才是全局的第二个示例的问题是,我的字段名不是静态的,事先就知道了,它们是通过点击按钮生成的,这是我的一个输入错误,如果大小写正确,它仍然不起作用,我假设您的clear select会选择所有select元素并清除它们,然后返回jQuery结果集,实际上它不会,只有当前对象和我的动态选择列表并不是页面上唯一的选择列表。那么每个选择列表是单独进行ajax调用还是都从同一个调用获取数据?它们来自同一个json数据源。我如何将其与动态选择列表的加载绑定?$function{}与$document.readyfunction{}相同。因此,这将连接就绪处理程序中的所有内容,无需使用$.fn扩展。其思想是,当document ready启动时,它将进行ajax调用,然后在回调中选择页面上的所有元素,清除它们,并用回调数据填充它们。是的,我理解这一点,但我的意思是如何从DOM中的选择列表调用它,该列表在$document.ready激发后注入。也请参见我上面的说明,我不想清除所有的选择元素,只想清除动态元素以用JSON数据填充它们。这正是我所做的,工作非常出色。再次感谢所有的帮助,在过去的几天里,我一直在用jquery/json/etc轰炸自己,最终我不得不学习它
var data = [{"Text":"file1","Value":1},{"Text":"file2","Value":2}];
var str = "";
$.each(data, function(index, optionData) {
str += "<option value=\"" + optionData.Value + "\">" + optionData.Text + "</option>";
});
"<select>" + str + "</select>";