Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有编辑/删除表行的jquery模式对话框_Jquery_Jquery Ui_Dialog_Modal Dialog - Fatal编程技术网

带有编辑/删除表行的jquery模式对话框

带有编辑/删除表行的jquery模式对话框,jquery,jquery-ui,dialog,modal-dialog,Jquery,Jquery Ui,Dialog,Modal Dialog,我的目标是:拥有一个带有编辑/删除按钮的数据表。“编辑”按钮打开一个模式对话框,其中表单预先填充了相应行的详细信息。我很难让ajax在运行中实际填写表单,所以我只是在modal中打开一个编辑页面并传递id。对于第一个编辑按钮,它非常有效。在后续的编辑按钮上根本不会发生任何操作。我不知所措。我不是javascript或jquery专家,但已经在Google上搜索过了,还没有找到任何东西来处理我的情况(或者我可以成功地适应)。我很确定它包含了.和/或.siblings,但我不确定如何实现。以下是除样

我的目标是:拥有一个带有编辑/删除按钮的数据表。“编辑”按钮打开一个模式对话框,其中表单预先填充了相应行的详细信息。我很难让ajax在运行中实际填写表单,所以我只是在modal中打开一个编辑页面并传递id。对于第一个编辑按钮,它非常有效。在后续的编辑按钮上根本不会发生任何操作。我不知所措。我不是javascript或jquery专家,但已经在Google上搜索过了,还没有找到任何东西来处理我的情况(或者我可以成功地适应)。我很确定它包含了.和/或.siblings,但我不确定如何实现。以下是除样式和一些用于验证用户的PHP之外的所有代码:

<link type="text/css" href="js/css/start/jquery-ui-1.8.9.custom.css" rel="stylesheet" />    
<!--<script type="text/javascript" src="js/js/jquery-1.4.4.min.js"></script>-->
<script type="text/javascript" src="js/jquery-1.5.1rc1.js"></script>
<script type="text/javascript" src="js/js/jquery-ui-1.8.9.custom.min.js"></script>

<script type="text/javascript">
//table highlights & such
$(document).ready(function() {
$(".striped tr").mouseover(function() {
$(this).addClass("highlight");
});
$(".striped tr").mouseout(function() {
$(this).removeClass("highlight");
});
$(".striped tr").toggle(function() {
$(this).addClass("selected");
}, function () {
$(this).removeClass("selected");
});
$(".striped tr:nth-child(odd)").addClass("odd");
});

$(function(){
    $('#edit_number').dialog({  autoOpen: false,width: 400,height: 500, modal:true, open: function() {
        var editqs = 'process.php?action=edit_num_form&id=' + $(this).data('num_id') + '&rep_id=<?php echo $rep_id ?>';
        $("#edit_number").load(editqs);
        }
    });

$('.edit_number_link').live('click', function() {
    var id = $(this).closest('tr').data('id');
    $("#edit_number").data('num_id', id).dialog('open');
    return false;
});


});

</script>
</head>

<body>
<table style="border: 1px solid #000;" border=1 cellpadding=0 cellspacing=0 class="striped">
  <thead>
    <tr style="background-color: #ccc;">
        <th align=left width=100>Name</th>
        <th align=left width=100>External</th>
        <th align=left width=100>Internal</th>
        <th align=left width=50>Options</th>
        <th align=left width=50>Hours</th>
        <th align=left width=150>Notes</th>
        <th colspan=2>&nbsp;</th>
    </tr>
  </thead>
<?php
//db connection stuff    
while($row = mysql_fetch_array($result))
  {
    $name = $row['name'];
    $external = $row['external'];
    $internal = $row['internal'];
    if ($internal == "")
      $internal = "&nbsp;";
    $options = $row['options'];
    if ($options == "")
      $options = "&nbsp;";
    $hours = $row['hours'];
    if ($hours == "")
      $hours = "&nbsp;";
    $comments = $row['comments'];
    if ($comments == "")
      $comments = "&nbsp;";
    $id = $row['id'];

  echo "<tr data-id=".$id."><td>" . $name . "</td>";
  echo "<td>" . build_link($external,$rep_id, "ext", $userfound) . "</td>";
  echo "<td>" . $internal . "</td>";
  echo "<td>" . $options . "</td>";
  echo "<td>" . $hours . "</td>";
  echo "<td>" . $comments . "</td>";
  //echo "<td><a href='process.php?action=edit_num_form&id=" . $id . "&rep_id=".$rep_id."' title='Edit'><img src='edit.png' alt='Edit' border='0'></a></td>";
  echo "<td><a href='#' title='Edit' class='edit_number_link'><img src='edit.png' alt='Edit' border='0'></a></td>";
  echo "<td><a href='process.php?action=delete_num&id=" . $id . "&rep_id=".$rep_id."' title='Delete'><img src='delete.png' alt='Delete' border='0'></a></td>";
  //echo "<td><a href='?action=delete' class='delete'>Delete</a></td>";
  echo "</tr>";
  }
echo "</table>";
mysql_close($con);
?>

<div id="edit_number" title="Edit Number">
</div>
</body>

</html>

//表格重点&如
$(文档).ready(函数(){
$(“.striped tr”).mouseover(函数(){
$(此).addClass(“突出显示”);
});
$(“.striped tr”).mouseout(函数(){
$(此).removeClass(“突出显示”);
});
$(“.striped tr”).toggle(函数(){
$(此).addClass(“选定”);
},函数(){
$(此).removeClass(“选定”);
});
$(“.striped tr:nth child(odd)”).addClass(“odd”);
});
$(函数(){
$(“#编辑_编号”)。对话框({autoOpen:false,宽度:400,高度:500,模式:true,打开:函数(){
var editqs='process.php?action=edit_num_form&id='+$(this.data('num_id')+'&rep_id=';
$(“#编辑#编号”)。加载(编辑);
}
});
$('.edit_number_link').live('单击',函数()){
var id=$(this).closest('tr')。data('id');
$(“#编辑#编号”).data('num#id',id.).dialog('open');
返回false;
});
});
名称
外部的
内部的
选择权
小时
笔记
因此,理想情况下,我可以从每个编辑按钮检索数据,以实际模式(不是外部页面)加载表单,但至少需要额外的实例才能工作


任何帮助都将不胜感激。谢谢

当您获得相同的ID“编辑号码链接”时,您应该尝试:

$("#edit_number_link").each(function() {
    $(this).click(function(){
          var id = $(this).closest('tr').attr('data-id');
           $("#edit_number").data('num_id', id).dialog('open');
        return false;
    });
});

或者类似的东西。

当您获得相同的ID“编辑号码链接”时,您应该尝试:

$("#edit_number_link").each(function() {
    $(this).click(function(){
          var id = $(this).closest('tr').attr('data-id');
           $("#edit_number").data('num_id', id).dialog('open');
        return false;
    });
});

或者类似的东西。

因为我看不到整个代码集…编辑编号链接在编辑编号内吗?如果是这样,则需要使用jQuery的live()方法绑定事件,因为DOM在初始页面加载后正在更新

另外,您不需要使用
attr('data-id')
,因为jQuery现在将把这些属性映射到
.data()
方法。您需要
.data('id')
来检索此值

另一件事是,当您应该使用类时,您正在使用ID。ID应该是唯一的,并且只使用一次。您应该将#编辑#编号#链接更改为类、.编辑#编号#链接。我不确定哪个容器是
#edit_number
,但我假设只有一个

$('.edit_number_link').bind('click', function() {
    var id = $(this).closest('tr').data('id');
    $("#edit_number").data('num_id', id).dialog('close').dialog('open');
    return false;
});

更新在看到代码并在JSFIDLE上实际试用之后,我发现,当您单击其他编辑链接时,对话框窗口已经打开,并且不会触发打开的回调。您需要做的是更新代码,以便在打开对话框之前关闭对话框。我上面的代码已更新为包含
.dialog('close')
。另外,我将
live
改回了
bind
,因为在这种情况下不需要它。

因为我看不到整个代码集…编辑编号链接在编辑编号内吗?如果是这样,则需要使用jQuery的live()方法绑定事件,因为DOM在初始页面加载后正在更新

另外,您不需要使用
attr('data-id')
,因为jQuery现在将把这些属性映射到
.data()
方法。您需要
.data('id')
来检索此值

另一件事是,当您应该使用类时,您正在使用ID。ID应该是唯一的,并且只使用一次。您应该将#编辑#编号#链接更改为类、.编辑#编号#链接。我不确定哪个容器是
#edit_number
,但我假设只有一个

$('.edit_number_link').bind('click', function() {
    var id = $(this).closest('tr').data('id');
    $("#edit_number").data('num_id', id).dialog('close').dialog('open');
    return false;
});

更新在看到代码并在JSFIDLE上实际试用之后,我发现,当您单击其他编辑链接时,对话框窗口已经打开,并且不会触发打开的回调。您需要做的是更新代码,以便在打开对话框之前关闭对话框。我上面的代码已更新为包含
.dialog('close')
。另外,我已将
live
更改回
bind
,因为在这种情况下不需要它。

页面上有任何脚本错误吗?我希望如此。这至少会给我一个方向去看。但是没有,没有脚本错误。页面上有脚本错误吗?我希望。这至少会给我一个方向去看。但是没有,没有脚本错误。感谢您提供关于attr的信息,但是您的更改现在使第一个链接也无法运行。我要更新我原来的帖子,包括所有相关代码…@jayhawkjoe,检查我更新的答案。你需要在打开它之前链接
.dialog('close')
。喜欢它!就这样。感谢@mcherbieThanks提供关于attr的信息,但是您的更改现在使第一个链接也无法运行。我要更新我原来的帖子,包括所有相关代码…@jayhawkjoe,检查我更新的答案。你需要在打开它之前链接
.dialog('close')
。喜欢它!就这样。谢谢@mcherbieThanks Louskan,但是你的改变没有什么不同。它的行为仍然是一样的。谢谢你,但是你的改变没有什么不同。它的行为方式仍然相同。