3

我正在尝试使用数据库数据填充 HTML 下拉列表。为此,我正在从数据库中检索数据并创建选项元素,如下所示:

var obj = eval("(" + data + ")");
for (i = 1; i <= obj.DATA.length; i++) {
    var col_val = obj.DATA[i - 1];
    $("#dropdown").append('<option value="' + col_val + '">' + col_val + '</option>');
}

我也尝试了另一种方法,如下所示:

$("#dropdown").html(data);

其中,data 是一个字符串,其中包含由调用的 CFC 页面在使用 cfloop 遍历数据库查询后返回的选项元素列表。

在添加新选项之前,我将使用以下任一语句删除旧选项。

$('#dropdown').empty(); 

$('#dropdown option').remove();

$('#dropdown').html('');

经过分析,我发现删除选项导致最大延迟。

是否有任何更快的替代 JavaScript 或 Jquery 函数可用于删除选项?或者您是否建议任何解决方法来提高性能?

注意:为此我必须使用 ColdFusion 和 AJAX。我也不能使用 ColdFusion 的内置 AJAX 功能。

谢谢!!

4

5 回答 5

1

我通常从 ajax 请求返回 html,所以响应看起来像

<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
<option value = "4">4</option>
...

然后只需使用$("#selectName").html(data);现在包含一堆选项标签的响应来填充选择。

于 2012-10-11T18:30:04.333 回答
0
  1. 如果您通过 ajax 获取选项,您应该能够运行 firefox Firebug 控制台并查看获取数据所需的确切时间。这可以肯定地证明问题是下载时间还是渲染时间。还要考虑:查询缓存、将 js 数组或列表写入 js 文件并在 CF 上使用直接 js 或减少选项数量(我无法通过 5k 选项进行图像滚动)

  2. 您也可以尝试将数据下载为列表并使用

    str.replace(',','<option>') 
    

将每个列表项“包装”在选项标签中。请记住:如果值和文本相同,则不必具有 value 参数。并且:您不必关闭选项标签:

    <option>1<option>2<option>3...<option>N
  1. 最后,如果这仍然太慢,那么我建议使用惰性加载器将您的选项加载到更易于管理的块中。您甚至可以触发惰性加载器以继续加载块,而不管用户的操作如何(使用 settimeout)。

希望这可以帮助。

于 2012-10-14T08:37:22.993 回答
0

ColdFusion is undefined 错误可能是因为您缺少到 /CFIDE/scripts 文件夹的虚拟映射,您可以手动将其从类似的 CF 安装复制到您的 webroot 以解决此问题或修复您的安装。

于 2012-10-11T18:39:24.257 回答
0

在循环的每次迭代中,您都会跳入 DOM。退出循环后,您需要执行 $("#dropdown") 操作。

于 2012-10-12T14:21:51.050 回答
0

使用此语法,这可能对仅使用 Coldfusion 有帮助

<CFSELECT NAME="name"
    REQUIRED="Yes/No"
    MESSAGE="text"
    ONERROR="text"
    SIZE="integer"
    MULTIPLE="Yes/No"
    QUERY="queryname"
    SELECTED="column_value"
    VALUE="text"
    DISPLAY="text"
    PASSTHROUGH="HTML_attributes">

</CFSELECT>

在查询属性附近,您可以传递您的查询名称。

于 2013-08-12T09:21:43.977 回答