再次问好,提前感谢。让我首先向您展示我试图解决的代码和问题:
<span class='dropdown' id='status'>
<?php
switch ($status) {
case "unassigned":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $status . "<span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='pending'>Pending</a></li>";
echo "</ul>";
break;
case "pending":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $status . "<span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='attending'>Attending</a></li>";
echo "<li><a class='editStatus' href='followup'>Follow Up</a></li>";
echo "<li><a class='editStatus' href='closed'>Closed</a></li>";
echo "</ul>";
break;
case "attending":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $status . "<span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='pending'>Pending</a></li>";
echo "<li><a class='editStatus' href='followup'>Follow Up</a></li>";
echo "<li><a class='editStatus' href='closed'>Closed</a></li>";
echo "</ul>";
break;
case "followup":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $status . "<span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='closed'>Closed</a></li>";
echo "</ul>";
break;
case "closed":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $status . "<span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='pending'>Pending</a></li>";
echo "<li><a class='editStatus' href='attending'>Attending</a></li>";
echo "<li><a class='editStatus' href='followup'>Follow Up</a></li>";
echo "</ul>";
break;
}
?>
</span>
我的 php 脚本中有这个跨度,其中包括一个下拉按钮,其中包含表示此页面中显示的消息的不同状态的选项,并通过 ajax 将此信息发送到另一个 php 脚本
<script>
var phpvar1 = "<?php echo $frompost_id_sanitized; ?>";
var phpvar = "<?php echo $status; ?>";
$('a.editStatus').click(function(event) {
event.preventDefault();
var statusJs = $(this).attr("href");
alert('Change Status of ticket to: ' + statusJs)
$.post('ajaxChangeStatus.php', {status: statusJs, id: phpvar1, initialStatus: phpvar}, function(data) {
$('#status').html(data)
});
});
最后,第二个 php 脚本将数据添加到 db 并将一些 html 发送回第一个 php 脚本,如下所示(省略了一些代码(
switch ($frompost_status_sanitized) {
case "pending":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $frompost_status_sanitized . " <span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='attending'>Attending</a></li>";
echo "<li><a class='editStatus' href='followup'>Follow Up</a></li>";
echo "<li><a class='editStatus' href='closed'>Closed</a></li>";
echo "</ul>";
break;
case "attending":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $frompost_status_sanitized . " <span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='pending'>Pending</a></li>";
echo "<li><a class='editStatus' href='followup'>Follow Up</a></li>";
echo "<li><a class='editStatus' href='closed'>Closed</a></li>";
echo "</ul>";
break;
case "followup":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $frompost_status_sanitized . " <span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='closed'>Closed</a></li>";
echo "</ul>";
break;
case "closed":
echo "<button type='button' data-toggle='dropdown' id='edit' aria-haspopup='true' aria-expanded='true' class='btn btn-danger dropdown-toggle'> Status: " . $frompost_status_sanitized . " <span class='caret'></span></button>";
echo "<ul class='dropdown-menu' aria-labelledby='edit'>";
echo "<li><a class='editStatus' href='pending'>Pending</a></li>";
echo "<li><a class='editStatus' href='attending'>Attending</a></li>";
echo "<li><a class='editStatus' href='followup'>Follow Up</a></li>";
echo "</ul>";
break;
}
一切似乎都正常:
这个想法是我(在第一个 php 脚本中(有一个带有选项的下拉按钮(表示显示的消息的状态(。当选择一个选项(例如状态已更改(时(单击事件(,我通过 ajax 将所选选项(新状态(发送到第二个 php 脚本,然后执行一些操作并将适当的 html(具有不同操作的下拉按钮(返回到第一个 php 脚本。
问题所在如果然后我选择另一个选项(例如,如果我尝试在不重新加载页面的情况下再次更改状态(,那么我会收到 404 错误,因为当单击该选项而不是触发点击事件然后event.preventdefault
......(应该发生(,应用程序读取 href 属性[用于将数据发送到第二个 PHP 脚本,如下所示:var statusJs = $(this).attr("href");]
并尝试加载导致 404 错误的页面http://localhost:8888/ticketing/pending
通常 js 脚本应该从 href 属性中读取值,防止默认操作(例如导致 404 的加载页面(,将数据发送到第二个 php 脚本并将 span contants 替换为返回的 html
怎么了?
委派是解决方案
https://learn.jquery.com/events/event-delegation/
多谢