Jquery和Ajax冲突,拖放不起作用


Jquery and Ajax conflict, drag and drop not working

我正在实现一个版本控制。所以基本上我总是在页面上有两个不同的问卷,最新的和旧的。最新的调查问卷由页面本身的 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");