如何为列表中的每个项创建唯一的Jquery对话框?

时间:2012-11-21 21:37:15

标签: jquery python jinja2

我正在使用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>标记赋予它自己独特的对话框的最佳方法是什么?谢谢!

1 个答案:

答案 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;
    });
  });
});