2012-08-26 49 views
-1

我是一个Javascript初学者,所以也许这对于专家来说很容易修复。我正在处理这个问题:http://www.3dsbuzz.com/receng/test.php源代码如下。Javascript变量undefined和onchange不工作

这个想法是,将图像拖动到白框中向文本框添加一个值,然后触发mysql查询并显示一些数据。但我有两个问题:

1)将图像拖入白框时,而不是显示图像的value属性,它只显示“未定义”。

2)当我硬编码一个值而不是使用变量(在第17行),它进入文本框罚款,但不会触发mysql查询,但它会触发如果您将其键入框直。

<html> 
<head> 
<style type="text/css"> 
#div1 {width:175px;height:97px;border:1px solid #aaaaaa;} 
</style> 
<script type="text/javascript"> 
function drag(ev){ 
    ev.dataTransfer.setData("Text",ev.target.id); 
} 
function allowDrop(ev){ 
    ev.preventDefault(); 
} 
function drop(ev){ 
    ev.preventDefault(); 
    ev.target.appendChild(document.getElementById(ev.dataTransfer.getData("Text"))); 
    var newtext = document.dragme.value; 
    document.myform.users.value += newtext; 
} 
function showUser(str){ 
if (str==""){ 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
xmlhttp=new XMLHttpRequest(); 
xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
} 
xmlhttp.open("GET","getuser.php?q="+str,true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 
<form name="myform"> 
<input type="text" name="users" onchange="showUser(this.value)"> 
</form> 
<div id="txtHint"><b>Type "49" or "50" in the box above</b></div> 
<br> 
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> 
<br /> 
<img id="49" name="dragme" value="49" src="http://www.3dsbuzz.com/wp-content/uploads/2012/06/mutantmuddsthumb.jpg" draggable="true" ondragstart="drag(event)" /> 
<img id="50" name="dragme" value="50" src="http://www.3dsbuzz.com/wp-content/uploads/2011/09/layton-thumb.jpg" draggable="true" ondragstart="drag(event)" /> 
</body> 
</html> 
+6

随意在问题中发布相关代码和标记。 ';)' –

+0

对不起,@JaredFarrish,因为只有一点代码,并且都是相关的,因为您需要查看页面以了解我在说什么,所以我认为这对于人们来说更容易在源代码。我会编辑它,确保将来在这里发布代码。 –

回答

0

1)图像没有固有的value属性。要么你必须使用getAttribute的值,或者,因为ID和价值是一样的,只是得到了下降的图像的ID:

function drop(ev){ 
    ev.preventDefault(); 
    ev.target.appendChild(document.getElementById(ev.dataTransfer.getData("Text"))); 
    var newtext = ev.dataTransfer.getData("Text"); 
    document.myform.users.value += newtext; 
} 

2)变更处理,如果用户改变了只被调用值,而不是脚本更改值。您必须手动触发它:

showUser(newtext); 
+0

令人惊叹!非常感谢。 –

0

var newtext = document.draging.value; 

应该

var newtext = document.dragimg.value; 

因为draging没有定义。

+0

对不起,你在我快速修改并保存时输入错误时,你一定看过,但这并不是原来的问题。 –

+0

np,我只是快速查看你的代码,看到了错字。但正如你所说,这不是问题。 :p – hamon