2009-11-16 5 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

답변

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

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를 선택하려고에 대한 onchange를 설정하려면 :

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

JQuery는 매우 일반적으로 사용되지만,이 프로젝트에서는 사용하지 않을 것을 알고 있습니다. 그래도 고마워. – mna

관련 문제