Как отправить содержимое текстовой области в функцию в Typescript / Javascript / Html
Возможно, очень простой вопрос, но я не могу найти способ отправки части данных из текстовой области в функцию javascript/typcript.
HTML
<div data-options="dxContent : { targetPlaceholder: 'content' } " >
<p> use this page to log errors</p>
<p id="prevErrors" style="font-style:italic">PreviousErrors</p>
<br />
<div id="curError" data-bind="dxTextArea: { }"></div>
<br />
<div data-bind="dxButton: { text: 'Save and return to main menu' }" onclick=" saveMyData(document.getElementById(curError).innerText)"></div>
</div>
Java/ Машинопись
<script>
function saveMyData(curError) {
//this will be where data is saved or emailed
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
if (dd < 10) {
dd = '0' + dd
}
if (h < 10) {
h = "0" + h;
}
if (s < 10)
{
s = "0"+s;
}
if (m < 10) {
m = "0"+m;
}
if (mm < 10) {
mm = '0' + mm
}
today = dd + '/' + mm + '/' + yyyy +" , "+h+":"+m+":"+s;
prevErrors.innerText += "\n "+today+", "+curError;
}
</script>
Только недавно узнав, что машинопись и JavaScript практически идентичны, я чувствую себя немного смущенным из-за того, что запуск машинописи был такой битвой - ничего подобного C#/vb/etc.
ВОПРОС
Я пытался отправить данные из этого dxtextArea
управление функцией. как вы можете видеть, я уже пытался использовать innerText, однако, похоже, это ничего не отправляет в функцию (получая ошибку:
'Uncaught TypeError: Cannot read property 'innerText' of null', line 1, file 'http://localhost:51828/index.html#'.
даже когда данные присутствуют в textArea.
Кто-нибудь сталкивался с этой проблемой / знает, как ее решить / или это просто моя глупость и наивность в знании Java/ машинописи?
РЕДАКТИРОВАТЬ
Мне сказали изменить мой вызов метода с innerText на value (и добавить кавычки вокруг идентификатора), но это все еще не решило проблему:
saveMyData(document.getElementById('curError').value)"
РЕДАКТИРОВАТЬ 2 Мой полный сценарий:
<div data-options="dxView : { name: 'ErrorLogging', title: 'ErrorLogging' } " >
<div data-options="dxContent : { targetPlaceholder: 'content' } " >
<p>Use this page to log errors</p>
<br />
<p style="font-style:italic">PreviousErrors</p>
<p id="prevErrors" style="font-style:italic"></p>
<br />
<div id="curError" data-bind="dxTextArea: { }" ></div>
<br />
<div data-bind="dxButton: { text: 'Save and return to main menu' }" onclick="saveMyData(document.getElementById('curError').textContent)"></div>
</div>
</div>
<script>
function saveMyData(elem) {
//this will be where data is saved or emailed
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
//add a '0' in front of single digit values
if (dd < 10) {
dd = '0' + dd
}
if (h < 10) {
h = "0" + h;
}
if (s < 10)
{
s = "0"+s;
}
if (m < 10) {
m = "0"+m;
}
if (mm < 10) {
mm = '0' + mm
}
if (elem.textContent) {
var curError = elem.textContent ?
elem.textContent :
elem.innerText;
}
alert(curError);
today = dd + '/' + mm + '/' + yyyy +" , "+h+":"+m+":"+s; //created string containing todays' date and time
prevErrors.innerText += "\n " + today + ", " + elem;
}
</script>
2 ответа
Я обнаружил, что с помощью
var val = $("#textArea").dxTextArea("instance").option("value");
Позволил мне получить удостоверение личности под названием textArea
, который затем может быть использован без вызова метода / функции.
Итак, теперь я мог бы использовать код:
prevErrors.innerText += "\n " + today + ", " + val;
чтобы иметь возможность получить входные данные dxTextArea в данные.
Задача решена!:)
Есть несколько вещей, которые нужно проверить.
Номер 1 - вы должны убедиться, что функция saveMyData
объявляется до его использования. Вы узнаете, что не сделали этого, так как получите сообщение об ошибке, например:
ReferenceError: saveMyData не определено
Номер 2 - innerText
общеизвестно сложно, но стандарт textContent
Обычно это лучшая ставка в современных браузерах.
document.getElementById('curError').textContent
Заметка - textContent
IE9 и выше (и почти все остальные браузеры). Чтобы получить поддержку ниже IE9, вам нужно протестировать эту функцию!
Если вы передали элемент, вы можете выполнить тест внутри функции, вот рабочая версия, которую вы можете запустить:
function saveMyData(elem) {
if (elem.textContent) {
var curError = elem.textContent ?
elem.textContent :
elem.innerText;
}
alert(curError);
}
<div data-options="dxContent : { targetPlaceholder: 'content' } " >
<p> use this page to log errors</p>
<p id="prevErrors" style="font-style:italic">PreviousErrors</p>
<br />
<div id="curError" data-bind="dxTextArea: { }">Test Text</div>
<br />
<div data-bind="dxButton: { text: 'Save and return to main menu' }" onclick="saveMyData(document.getElementById('curError'));">Click Me</div>
</div>