Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载selectlist(而不是文档)时,在JQuery中用json数据填充selectlist_Jquery_Asp.net Mvc - Fatal编程技术网

加载selectlist(而不是文档)时,在JQuery中用json数据填充selectlist

加载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

我在表单上有一个按钮,该按钮动态生成一个选择列表,该列表应该填充json数据,所有json数据都被正确拉入我唯一的问题是挂接selectlist的onload事件以填充数据,我知道我可以使用$'itemID'。fillSelectlist来填充它,但问题是我的选择列表ID是动态生成的,我不知道有什么方法可以像$item+itemNum+列表那样连接选择

我目前的代码如下:

$.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>";