Как отправить содержимое текстовой области в функцию в 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>

Изображение как это будет выглядеть на ios

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>

Другие вопросы по тегам