我正在使用Jinja2在Python中构建基于浏览器的应用程序,并希望为文件列表中的每个项目添加一个对话框。例如,我的Python / Jinja2生成以下HTML:
<div id="dialog">Unique data goes here.</div>
...
<li class="ui-widget-content">something.pdf</li>
<li class="ui-widget-content">something else.zip</li>
<li class="ui-widget-content">something else(1).zip</li>
...
我希望每个<li>
都可以调出显示对话框的Javascript,并且每个对话框都包含与列表中文件相关的唯一信息。这份清单也在不断变化。这是我到目前为止的JS代码,但这只会在列表中显示每个<li>
标记的第一项:
$.fx.speeds._default = 1000;
$(function() {
$( "#dialog" ).dialog({
autoOpen: false,
show: "slide",
hide: "fade"
});
});
$(document).ready(function(){
$("#selectable").children("li").each(function() {
$(this).mouseover(function(){
$(this).css("background-color","#FECA40");
});
$(this).mouseout(function(){
$(this).css("background-color","white");
});
$(this).click(function(){
$("#dialog").dialog( "open" );
return false;
});
});
});
我对Javascript很陌生,完全迷失在这个问题上。我能想到实现这一目标的唯一方法是为每个id
分配一个唯一的<div>
,然后为每个id
创建一个相应的函数。由于列表超过300个文件,这似乎并不太明智。为每个<li>
标记赋予它自己独特的对话框的最佳方法是什么?谢谢!
答案 0 :(得分:1)
这有用吗?
$.fx.speeds._default = 1000;
$(function() {
$( "#dialog" ).dialog({
autoOpen: false,
show: "slide",
hide: "fade"
});
});
$(document).ready(function(){
$("#selectable").children("li").each(function() {
$(this).mouseover(function(){
$(this).css("background-color","#FECA40");
});
$(this).mouseout(function(){
$(this).css("background-color","white");
});
$(this).click(function(){
// if no dialog has been created for this li
if (!$(this).data('dialog')) {
// initialize one
$(this).data('dialog',
$('<div />')
//.text($(this).text()) // set the text of the dialog
.load('someurl.php?file=' + encodeURIComponent($(this).text())) // set content by ajax request
.dialog({autoOpen: false})
);
}
var dlg = $(this).data('dialog');
dlg.dialog( "open" );
return false;
});
});
});