2012-08-26 86 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