In Javascript TextArea How to set its width dynamically,
I tried with below code which works only for the last Id am passing as Argument.
Please help me to find what am doing Wrong.
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
textarea {
border : 1 black;
overflow: hidden;
padding: 0;
outline: none;
background-color: yellow;
resize: none;
}
</style>
<script type="text/javascript">
var observe;
if (window.attachEvent) {
observe = function (element, event, handler) {
element.attachEvent('on'+event, handler);
};
}
else {
observe = function (element, event, handler) {
element.addEventListener(event, handler, false);
};
}
function loadTArea (ids) {
for (var i = 0; i < ids.length; i++) {
var text = document.getElementById(ids[i]);
function resize () {
text.style.height = 'auto';
text.style.height = text.scrollHeight+'px';
}
/* 0-timeout to get the already changed text */
function delayedResize () {
window.setTimeout(resize, 0);
}
observe(text, 'change', resize);
observe(text, 'cut', delayedResize);
observe(text, 'paste', delayedResize);
observe(text, 'drop', delayedResize);
observe(text, 'keydown', delayedResize);
text.focus();
text.select();
resize();
}
}
</script>
</head>
<body onload="loadTArea (['text1','text2']);">
<textarea rows="1" style="height:1em;" id="text1"> sadfa daf </textarea>
<textarea rows="1" style="height:1em;" id="text2"> sadfa daf </textarea>
</body>
</html>
In Javascript TextArea How to set its width dynamically,
I tried with below code which works only for the last Id am passing as Argument.
Please help me to find what am doing Wrong.
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
textarea {
border : 1 black;
overflow: hidden;
padding: 0;
outline: none;
background-color: yellow;
resize: none;
}
</style>
<script type="text/javascript">
var observe;
if (window.attachEvent) {
observe = function (element, event, handler) {
element.attachEvent('on'+event, handler);
};
}
else {
observe = function (element, event, handler) {
element.addEventListener(event, handler, false);
};
}
function loadTArea (ids) {
for (var i = 0; i < ids.length; i++) {
var text = document.getElementById(ids[i]);
function resize () {
text.style.height = 'auto';
text.style.height = text.scrollHeight+'px';
}
/* 0-timeout to get the already changed text */
function delayedResize () {
window.setTimeout(resize, 0);
}
observe(text, 'change', resize);
observe(text, 'cut', delayedResize);
observe(text, 'paste', delayedResize);
observe(text, 'drop', delayedResize);
observe(text, 'keydown', delayedResize);
text.focus();
text.select();
resize();
}
}
</script>
</head>
<body onload="loadTArea (['text1','text2']);">
<textarea rows="1" style="height:1em;" id="text1"> sadfa daf </textarea>
<textarea rows="1" style="height:1em;" id="text2"> sadfa daf </textarea>
</body>
</html>
Share
Improve this question
edited Jun 10, 2013 at 10:30
Mr. Polywhirl
48.9k12 gold badges94 silver badges145 bronze badges
asked Jun 10, 2013 at 10:24
JerichoJericho
11k39 gold badges124 silver badges206 bronze badges
2
- 1 What are you trying to do? Your question is too localized, give us some context so that we can give you a general solution that other people can benefit from. SO is about questions and answers knowledge base, and your question in its current state hardly qualifies for a knowledge base. – Armen Michaeli Commented Jun 10, 2013 at 10:45
- THANKS FOR ALL YOUR SUPPORT – Jericho Commented Jun 10, 2013 at 12:57
2 Answers
Reset to default 3have a look here: http://jsfiddle/8kqJH/
code
function loadTArea(ids) {
for (var i = 0; i < ids.length; i++) {
var text = document.getElementById(ids[i]);
function resize(el) { //changes here
el.style.height = 'auto';
el.style.height = text.scrollHeight + 'px';
}
function delayedResize() {
window.setTimeout(resize, 0);
}
observe(text, 'change', resize);
observe(text, 'cut', delayedResize);
observe(text, 'paste', delayedResize);
observe(text, 'drop', delayedResize);
observe(text, 'keydown', delayedResize);
text.focus();
text.select();
resize(text); //changes here
}
}
EDIT
To change textarea dinamycally while user types:
function resize:
function resizeTextarea(){
this.style.height = 'auto';
this.style.height = this.scrollHeight + 'px';
}
event binding:
document.getElementById("text1").onkeyup = resizeTextarea;
document.getElementById("text2").onkeyup = resizeTextarea;
OR, to apply to all textareas without specifying the ID
var text = document.getElementsByTagName("textarea");
for(var x = 0; x < text.length; x++)
text[x].onkeyup = resizeTextarea;
working example: http://jsfiddle/LbMzD/3/
You need to pass the element you want to resize to your function:
var element = document.getElementById(ids[i]);
function resize(element) {
element.style.height = value;
}
resize(element);