使用 jQuery UI 折叠面板显示 couchDB 数据库搜索结果时出现问题
Problems using jQuery UI accordion to display couchDB database search results
我正在尝试创建一个页面,显示提交给英国计算网格的计算作业的作业信息。该页面旨在以易于访问的格式显示来自 couchDB 的作业信息。我想使用 jQuery 手风琴来显示信息,以便我最初只能看到最相关的作业信息,然后用户可以根据需要浏览其他部分以获取更多详细信息。
为此,我有两个文件:
-
我有一个 HTML 文件(作业.html):
<html> <!-- source jquery, jquery.couch, bootstrap scripts //--> <script type="text/javascript" src="job.js"></script> <!-- script to define accordion //--> <body> <div id="content"> <h1 id="jobhead">Job Description : </h1> <hr/> <div id="accordion"> </div> </div> </body> </html>
-
我有一个javascript文件(job.js),它查询数据库,打开正确的作业文件并将HTML代码附加到手风琴:(前面的stackoverflow问题在执行此操作时非常有用!
//define function 'get_parameter_by_name' //code to define database name $db var record_id = get_parameter_by_name('id'); $(document).ready(function() { //Destroy accordion first: $('#accordion').accordion('destroy'); //clear records $('#accordion').empty(); //use .openDoc method to get job information, then append html $db.openDoc(record_id, { success: function(data) { //check correct data is accessed console.log(data); //html content of accordion appended, e.g html = '<h3><a href="#">Key Information:</a></h3>'; //Header 1 html += '<div>'; //Start of content 1 html += '<table id="keyData">'; html += '<tr><td>Module</td><td>' + data.module + '</td></tr>'; ... //append html $('#accordion').append(html); }, error: function(e) { alert('Error loading from database: ' + e); } }); //Remake accordion $('#accordion').accordion({ header: "h3", collapsible: true }); });
我的问题是html被很好地附加了,但它没有被格式化为手风琴 - 即所有附加的HTML都立即显示,标题无法展开/折叠。
在稍微调整了一下顺序之后,我已经发现,如果我附加 HTML 的代码放置在 db.openDoc()
方法之外,它工作正常。这只适用于文本,但我需要显示此方法中定义的许多变量(而不仅仅是显示的变量)。
所以我的问题是是否可以存储我需要的变量,以便可以在openDoc()
方法之外访问它们。或者,如果有一种方法可以在方法中附加 HTML,以便它与手风琴一起使用。
您能建议的任何答案将不胜感激。同样,我只学习了几个星期的javascript/HTML,所以如果你能推荐一种更简单的方法,我也很乐意在这里。
提前谢谢你!
每次从 db 获得结果时都需要销毁手风琴。
//Remake accordion
$('#accordion').accordion('destroy').accordion({ header: "h3", collapsible: true });
检查这个jsfiddle
另外,您不需要在页面加载时销毁手风琴,因此请删除以下行:
//Destroy accordion first:
$('#accordion').accordion('destroy');
编辑:正如@Shmiddty提到的,你需要将手风琴重新制作成成功的回调.
我假设"openDoc"方法是异步调用,对吗?
如果是这样,则在附加任何 HTML 之前调用"重制"手风琴的代码。
试试这个:
$(document).ready(function() {
//Destroy accordion first:
$('#accordion').accordion('destroy');
//clear records
$('#accordion').empty();
//use .openDoc method to get job information, then append html
$db.openDoc(record_id, {
success: function(data) {
//check correct data is accessed
console.log(data);
//html content of accordion appended, e.g
html = '<h3><a href="#">Key Information:</a></h3>'; //Header 1
html += '<div>'; //Start of content 1
html += '<table id="keyData">';
html += '<tr><td>Module</td><td>' + data.module + '</td></tr>';
...
//append html
$('#accordion').append(html);
//Remake accordion
$('#accordion').accordion({ header: "h3", collapsible: true });
},
error: function(e) {
alert('Error loading from database: ' + e);
}
});
});
如果要将多个项目填充到折叠项中,则需要对其进行修改,以便仅在添加最后一项后调用用于重新生成折叠项的代码。或者,如果您要动态添加项目,则每次都销毁并创建手风琴(尽管我不确定销毁是否必要)。
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- 在web应用程序中的新搜索中重新加载搜索结果(不带jQuery)
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 显示可链接的搜索结果+对齐方式
- 谷歌位置服务附近搜索结果基于正确的地图中心的位置
- 为自定义网站创建JavaScript搜索框,创建显示搜索结果的弹出窗口
- 主干,如何记住搜索结果
- 为什么不'我的扩展程序不会出现在Chrome网上商店的搜索结果中
- 如何从谷歌自定义搜索下载搜索结果
- (临时)在Web应用程序中存储JSON搜索结果
- Angular JS根据搜索结果和点击事件更新DOM元素
- 停止 jQuery 自动完成以过滤/搜索结果并填充整个源数组数据
- 使用 jQuery UI 折叠面板显示 couchDB 数据库搜索结果时出现问题
- 清除网格中的存储和加载搜索结果
- 引导 3 - 文本输入下的下拉搜索结果
- GoogleMapsForRails-只有在搜索结果发生变化时才通过ajax更新标记
- 从PHP自动完成动态搜索SQL数据库
- 如何将搜索结果显示为“搜索结果”;显示300〃中的1-10〃;
- 当至少有20个搜索结果时,只呈现10个搜索结果?使用Google Places API
- 如何使用php从mysql数据库中提炼/过滤搜索结果