动态 JQuery UI 中的 Tablesorter 不起作用
Tablesorter in dynamic JQuery UI doesn't work
这是我第一次 post 访问此站点,我发誓我已经搜索了我的问题的答案。也许我在阅读的主题中遗漏了一些内容。 (抱歉我的英语不好,我是法国人。)
我在用户执行点击时创建一个对话框,然后我用 ajax 结果填充此对话框(具有特定内容的 table)。这是我的代码:
包括
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script type="text/javascript" src="../tablesorter/jquery.tablesorter.js"></script>
我的js函数
function click_like(e, idProjet) {
var evt = e ? e:window.event;
if (evt.stopPropagation)
evt.stopPropagation();
if (evt.cancelBubble!=null)
evt.cancelBubble = true;
if(document.getElementById("dialog") != null) {
$('#dialog').remove();
}
$('#projets').append("<div id='dialog' style='display: none;'></div>");
$( "#dialog" ).dialog(
{
title: 'Projet '+idProjet,
autoOpen: false,
height: 400,
width: 400,
close: function(event, ui) {
$(this).dialog('destroy').remove();
$('#dialog').remove();
}
});
$( "#dialog" ).load('./../js/js_get_etudiants_interesses.php?idProjet='+idProjet).dialog('open');
}
Php 文件
<?php
//php things
?>
<p> Les étudiants intéressés sont: </p>
<table id="tous_les_etudiants" class="tablesorter">
<thead>
<tr>
<td> Nom </td>
<td> Prénom </td>
<td> Spécialité </td>
<td> Email </td>
</tr>
</thead>
<tbody>
<?php
foreach($etudiants AS $etudiant) {
echo '<tr>';
echo '<td>'.$etudiant->get_NOM().'</td>';
echo '<td>'.$etudiant->get_PRENOM().'</td>';
echo '<td>'.$etudiant->get_SPECIALITE().'</td>';
echo '<td>'.$etudiant->get_EMAIL().'</td>';
echo '</tr>';
}
?>
</tbody>
</table>
<script>
$("#tous_les_etudiants").tablesorter();
</script>
问题是我没有收到任何错误,table 不是 sortable,但是样式有效。
在其他 table (不是按需生成)上它工作正常。
我看过这个线程,但它没有答案 Why jquery... and here,但我很确定我在创建 div 之后进行了 tablesorter 调用。
我试图在 php 文件中调用,也在我的 js 函数的末尾。
也许你可以指出我为什么愚蠢,因为我确定这是愚蠢的。
感谢阅读,如果答案已经存在,我们深感抱歉。
Tablesorter 需要在对话框 window 变为可见后进行初始化 (demo):
HTML
<button id="opener">Open Dialog</button>
<div id="dialog" title="Basic dialog">
<table class="tablesorter">
<thead>
...
</thead>
<tbody>
...
</tbody>
</table>
</div>
脚本
$(function () {
$("#opener").click(function () {
$("#dialog").dialog("open");
});
$("#dialog").dialog({
autoOpen: false,
open: function (event, ui) {
$('.ui-dialog table').tablesorter({
theme: 'blue'
});
}
});
});
更新:如果您打算将信息加载到对话框中,则此方法 (dialog().load().dialog('open');
) 不正确,因为未考虑 ajax 的异步性质。相反,use the load()
function's callback method:
$( "#dialog" ).load('./../js/js_get_etudiants_interesses.php?idProjet='+idProjet, function(){
$( "#dialog" ).dialog('open');
});
这是我第一次 post 访问此站点,我发誓我已经搜索了我的问题的答案。也许我在阅读的主题中遗漏了一些内容。 (抱歉我的英语不好,我是法国人。)
我在用户执行点击时创建一个对话框,然后我用 ajax 结果填充此对话框(具有特定内容的 table)。这是我的代码:
包括
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script type="text/javascript" src="../tablesorter/jquery.tablesorter.js"></script>
我的js函数
function click_like(e, idProjet) {
var evt = e ? e:window.event;
if (evt.stopPropagation)
evt.stopPropagation();
if (evt.cancelBubble!=null)
evt.cancelBubble = true;
if(document.getElementById("dialog") != null) {
$('#dialog').remove();
}
$('#projets').append("<div id='dialog' style='display: none;'></div>");
$( "#dialog" ).dialog(
{
title: 'Projet '+idProjet,
autoOpen: false,
height: 400,
width: 400,
close: function(event, ui) {
$(this).dialog('destroy').remove();
$('#dialog').remove();
}
});
$( "#dialog" ).load('./../js/js_get_etudiants_interesses.php?idProjet='+idProjet).dialog('open');
}
Php 文件
<?php
//php things
?>
<p> Les étudiants intéressés sont: </p>
<table id="tous_les_etudiants" class="tablesorter">
<thead>
<tr>
<td> Nom </td>
<td> Prénom </td>
<td> Spécialité </td>
<td> Email </td>
</tr>
</thead>
<tbody>
<?php
foreach($etudiants AS $etudiant) {
echo '<tr>';
echo '<td>'.$etudiant->get_NOM().'</td>';
echo '<td>'.$etudiant->get_PRENOM().'</td>';
echo '<td>'.$etudiant->get_SPECIALITE().'</td>';
echo '<td>'.$etudiant->get_EMAIL().'</td>';
echo '</tr>';
}
?>
</tbody>
</table>
<script>
$("#tous_les_etudiants").tablesorter();
</script>
问题是我没有收到任何错误,table 不是 sortable,但是样式有效。 在其他 table (不是按需生成)上它工作正常。 我看过这个线程,但它没有答案 Why jquery... and here,但我很确定我在创建 div 之后进行了 tablesorter 调用。 我试图在 php 文件中调用,也在我的 js 函数的末尾。 也许你可以指出我为什么愚蠢,因为我确定这是愚蠢的。 感谢阅读,如果答案已经存在,我们深感抱歉。
Tablesorter 需要在对话框 window 变为可见后进行初始化 (demo):
HTML
<button id="opener">Open Dialog</button>
<div id="dialog" title="Basic dialog">
<table class="tablesorter">
<thead>
...
</thead>
<tbody>
...
</tbody>
</table>
</div>
脚本
$(function () {
$("#opener").click(function () {
$("#dialog").dialog("open");
});
$("#dialog").dialog({
autoOpen: false,
open: function (event, ui) {
$('.ui-dialog table').tablesorter({
theme: 'blue'
});
}
});
});
更新:如果您打算将信息加载到对话框中,则此方法 (dialog().load().dialog('open');
) 不正确,因为未考虑 ajax 的异步性质。相反,use the load()
function's callback method:
$( "#dialog" ).load('./../js/js_get_etudiants_interesses.php?idProjet='+idProjet, function(){
$( "#dialog" ).dialog('open');
});