我正在实现一个版本控制。所以基本上我总是在页面上有两个不同的问卷,最新的和旧的。最新的调查问卷由页面本身的 php 脚本显示,对于旧版本,我有一个简单的下拉菜单,根据选择的选项,我在下面加载了不同的问卷,使用 AJAX 脚本,因此问卷仍然在相同的初始页面上,但在其自己的div 中。所以我在页面中有喜欢的页面。
我正在使用 JQuery 拖放问题并更改它们的顺序。Jquery在页面本身加载的调查问卷上工作正常,但在AJAX请求获取的页面上不起作用。当我说它不起作用时,我的意思是它不认为这些问题是可拖动的。
有趣的是,如果我在浏览器中单独打开第二页,它可以正常工作。所以这与ajax和jquery之间的冲突有关。
我正在使用的脚本是:
<!-- Example JavaScript files -->
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="jquery-ui-1.8.custom.min.js"></script>
<!-- Example jQuery code (JavaScript) -->
<script type="text/javascript">
$(document).ready(function(){
// Get items
function getItems(exampleNr)
{
var columns = [];
$(exampleNr + ' ul.sortable-list').each(function(){
columns.push($(this).sortable('toArray').join(',,'));
});
return columns.join('|');
}
// Example 2.1: Get items
$('#example-2-1 .sortable-list').sortable({
connectWith: '#example-2-1 .sortable-list',
placeholder: 'placeholder',
});
//recent questionnaire button
$('#btn-get').click(function(){
var boo=getItems('#example-2-1');
alert(boo);
});
// Example 3.1: Get items
$('#example-3-1 .sortable-list').sortable({
connectWith: '#example-3-1 .sortable-list',
placeholder: 'placeholder',
});
//old_version questionnaire button
$('#btn-get1').click(function(){
var boo=getItems('#example-3-1');
alert("Didi");
});
});
</script>
我在两个页面上都有脚本,主页面和我使用 AJAX 调用获取的脚本。但即使我试图只对其中一个问题进行讨论,它仍然没有看到第二组问题是可拖动的。
我使用的 AJAX 脚本是:
<script>
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","display_old_versions.php?q="+str,true);
xmlhttp.send();
}
function myFunction()
{document.write(divs);
location.href = "http://napred.cs.stir.ac.uk/php/drag1.php"+"?boxes="+divs+"&qText="+questions+"&token="+'<?php echo $table;?>';
}
</script>
此问题与 DOM(文档对象模型)有关...
您正在通过 ajax 加载数据,因为此 jquery 永远不会涉及已创建的新元素(DOM 元素)...
尝试使用 jQuery .on() 函数添加元素...
创建新对象时,需要向其添加事件处理程序。新创建的 DOM 对象不会保留它们所替换的对象的处理程序,除非您只编辑其内容。
根据您用于拖放功能的实现,此问题有不同的解决方案。 例如,jQuery UI的可排序使用"刷新"功能。
在您的情况下,这应该可以解决问题:
在返回之前添加到函数 getItems:
$(exampleNr + ' .sortable-list').sortable("refresh");