2017-05-30 51 views
0

我设计了一个程序。有了它,我可以在我的页面上移动li标签。jQuery的工作时,李是在顶部,而不是当它在底部

代码:

var click = 0; 
 
var pos_x = 0; 
 
var pos_y = 0; 
 
var a = 0; 
 
var out = [0, 0, 0, 0]; 
 

 
$(".movenode").mousedown(function() { 
 
\t \t \t \t a = $(this).attr("id"); 
 
     var b = $(this).position(); 
 
     if(click == 0) 
 
     { 
 
     \t  pos_x = b.left; 
 
      pox_y = b.top; 
 
     } 
 
     click = 1; 
 
     
 
     $(document).mousemove(function(e) { 
 
     if(click==1) { 
 
      $("#"+a).css({left:e.pageX-b.left-40, top:e.pageY-b.top-10}); 
 
     } 
 
    }); 
 
    
 
}); 
 

 
$(document).mouseup(function(e) { 
 
    $("#"+a).css({left:pos_x, top:pos_y}); 
 
    var d = 1; 
 
    while(d < 5) { 
 
     var pos = $("#"+d).position(); 
 
     if(e.pageY > pos.top && e.pageY < pos.top + $("#"+d).height() && e.pageX > pos.left && e.pageX < pos.left + $("#"+d).width()) { 
 
    \t  alert($("#"+d).attr("id")); 
 
     } 
 
     d++; 
 
    } 
 

 
    click = 0; 
 
});
.movenode { 
 
    position:relative; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<li class="movenode" id="1"/>1234 
 
<li class="movenode" id="2"/>sadsdsadsad 
 
<li class="movenode" id="3"/>sadsdsadsad 
 
<li class="movenode" id="4"/>sadsdsadsad

此代码的工作。但我有一个小问题。当我在此为了这个代码添加到我的HTML文件,并设置元素:

  1. HTML(仅此4 LI)
  2. LOAD CSS为HTML
  3. 加载JS到html

这个程序的工作原理,但是当我设置顺序此元素:

  1. 加载CSS的HTML
  2. 个加载JS到html
  3. HTML(这4 LI)

这一计划doeasn't工作。我不能动这个李。事实上,JS的工作原理是让我看到警报,但我仍然无法移动此李。 我不能让我们头,身体等,因为它不工作。 我该怎么做才能修复这个bug?

+0

这就像加载HTML动态。你必须使用jQuery的.on()函数,像这里https://stackoverflow.com/questions/13107715/binding-jquery-to-dynamically-loaded-content – Gerard

+0

首先你应该小心地加载js代码之前关闭body标签,然后你应该将所有js代码包装在$(document).ready()函数 –

+0

中,当你像这样使用DOM时,在javascript或jQuery中,html元素必须存在于浏览器中,如果这个js代码放置在之前,html元素尚未被解析,并且选择失败。你必须把它放在(通常在元素之后或者在body的最后),或者用你的代码在这里引起奇怪的显示方式使用'$(document).ready'(Firefox) – Kaddath

回答

1

尝试添加$(document).ready(function(){ //code });

var click = 0; 
 
var pos_x = 0; 
 
var pos_y = 0; 
 
var a = 0; 
 
var out = [0, 0, 0, 0]; 
 
$(document).ready(function(){ 
 
$(".movenode").mousedown(function() { 
 
\t \t \t \t a = $(this).attr("id"); 
 
     var b = $(this).position(); 
 
     if(click == 0) 
 
     { 
 
     \t \t pos_x = b.left; 
 
     \t \t pox_y = b.top; 
 
     } 
 
     click = 1; 
 
     
 
     $(document).mousemove(function(e) 
 
     { 
 
      if(click==1) 
 
      { 
 
      $("#"+a).css({left:e.pageX-b.left-40, top:e.pageY-b.top-10}); 
 
      } 
 
    \t }); 
 
    
 
}); 
 

 
$(document).mouseup(function(e) { 
 
    $("#"+a).css({left:pos_x, top:pos_y}); 
 
\t var d = 1; 
 
while(d < 5) 
 
{ 
 
    \t var pos = $("#"+d).position(); 
 

 
\t \t if(e.pageY > pos.top && e.pageY < pos.top + $("#"+d).height() && e.pageX > pos.left && e.pageX < pos.left + $("#"+d).width()) 
 
    { 
 
    \t \t \t \t alert($("#"+d).attr("id")); 
 
    } 
 
    d++; 
 
} 
 

 
\t \t \t 
 
    \t click = 0; 
 
}); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<li class="movenode" id="1"/>1234 
 
<li class="movenode" id="2"/>sadsdsadsad 
 
<li class="movenode" id="3"/>sadsdsadsad 
 
<li class="movenode" id="4"/>sadsdsadsad

+0

谢谢,我不知道我什么时候忘了它。现在一切正常,谢谢:) – Warmix

相关问题