2009-11-16 43 views
0

研究員,
我寫了一些代碼來保存網頁的當前狀態。當有一個文本框在輸入中更改值時,該更改未在html代碼中註冊。即使我打電話:js-html - 鍵入的文本框的值沒有在屬性中設置?

object.value = 'x'; 

是不會更改值。當我使用:

object.setAttribute('value','x'); 

然後,更改是在html代碼中註冊。

有一個循環遍歷文本框設置onchange屬性不是一個解決方案,因爲我有特殊的文本框已經有他們的onchange屬性設置。

感謝所有幫助

function SaveHTML() 
{ 
removeThis(get('Source')); 
var newdiv = document.createElement('div'); 
newdiv.setAttribute('id','Source'); 
newdiv.style.position= 'absolute'; 
newdiv.style.top= (tempY-200)+'px'; 
newdiv.style.left= (tempX+30)+'px'; 
newdiv.style.backgroundColor = 'white'; 
var html=encodeURI(document.getElementsByTagName('body')[0].innerHTML); 
newdiv.innerHTML='HTML:<br><textarea rows="20" cols="60">'+html+'</textarea><br><input type=button value=close onclick=removeParent(this)>'; 
document.body.appendChild(newdiv); 
} 

function LoadHTML() 
{ 
removeThis(get('Source')); 
var newdiv = document.createElement('div'); 
newdiv.setAttribute('id','Source'); 
newdiv.style.position= 'absolute'; 
newdiv.style.top= (tempY-200)+'px'; 
newdiv.style.left= (tempX+30)+'px'; 
newdiv.style.backgroundColor = 'white'; 
newdiv.innerHTML='HTML:<br><textarea id=code rows="20" cols="60"></textarea><br><input type=button value=cancel onclick=removeParent(this)> <input type=button value=load onclick=document.getElementsByTagName(\'body\')[0].innerHTML=decodeURI(get(\'code\').value)>'; 
document.body.appendChild(newdiv); 
} 

function get(Element) 
{ 
return document.getElementById(Element); 
} 

function removeThis(obj) 
{ 
try{ 
obj.parentNode.removeChild(obj); 
} 
catch (e) { 
    return; 
} 
} 

function removeParent(obj) 
{ 
obj.parentNode.parentNode.removeChild(obj.parentNode); 
} 
+0

是你的問題爲什麼'setAttribute'工作和'o.value = ...'不? – geowa4 2009-11-16 13:32:54

回答

0

在SaveHTML中調用我運行這個函數。奇蹟般有效!

function TouchInputs() 
{ 
var everything = document.getElementsByTagName('input'); 
var everythinglength = everything.length; 
for(var i = 0;i<everythinglength;i++) 
    { 
     try{ 
      everything[i].setAttribute('value',everything[i].value); 
     } 
     catch(e){ 
       alert(e.message); 
      } 
    } 
} 
0

嗯,這很奇怪。我不會指望它會這樣做。有趣。

你可以簡單地通過循環在一次保存HTML,每個輸入字段做

object.setAttribute("value", object.value) 

您也可以使用其中一個大框架的事件處理函數,它們可以附加事件而不覆蓋舊事件。

+0

我在FF IE Chrome和Safari上測試了行爲。只有IE有預期的行爲。 – mna 2009-11-16 13:44:14

0

setAttribute和getAttribute不應該被使用,因爲它們不是標準,使用.value應該可以工作。但另一種方法是使用jQuery的attr方法。

$('#myID').attr('id', 'newID'); 
$('#myID').attr('value', 'newValue'); 

而且你應該使用正確的引號是這樣的:

newdiv.innerHTML='HTML:<br><textarea rows="20" cols="60">'+html+'</textarea><br><input type="button" value="close" onclick="removeParent(this)">'; 

newdiv.innerHTML='HTML:<br><textarea id="code" rows="20" cols="60"></textarea><br><input type="button" value="cancel" onclick="removeParent(this)"> <input type="button" value="load" onclick="document.getElementsByTagName(\'body\')[0].innerHTML=decodeURI(get(\'code\').value)">'; 

要設置平變化對特定事物嘗試jQuery選擇:

$('#myID').onchange(function(){/* your stuff here */}); 
+0

我知道JQuery是非常常用的,但是對於這個項目我不希望使用它。不過謝謝。 – mna 2009-11-16 14:12:07

相關問題