【问题标题】:How to send the contents of a text area to a function in Typescript / Javascript / Html如何将文本区域的内容发送到 Typescript / Javascript / Html 中的函数
【发布时间】:2023-03-11 22:45:01
【问题描述】:

可能是一个非常简单的问题,但我似乎找不到将一段数据从 textarea 发送到 javascript/typescript 函数的方法。

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/TypeScript

<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>

直到最近才发现 typescript 和 javascript 几乎是相同的,我感到有点尴尬的是,启动 typescript 是一场这样的战斗 - 与 c#/vb/etc 完全不同。

问题

我一直试图从这个dxtextArea 控件向函数发送数据。如您所见,我已经尝试过使用 innerText,但是,这似乎没有向函数发送任何内容(出现错误:

'Uncaught TypeError: Cannot read property 'innerText' of null', line 1, file 'http://localhost:51828/index.html#'.

即使数据存在于 textArea 中。

任何人都遇到过这个问题/知道如何解决它/或者这只是我对 Java/typescript 知识的愚蠢和幼稚?

编辑

我被告知将我的方法调用从 innerText 更改为 value(并在 ID 周围添加引号),但这仍然没有解决问题:

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>

【问题讨论】:

  • 是否声明了 prevErrors?使用 document.getElementById("prevErrors").innerText
  • @DennisAnderson prevErrors 工作正常(添加日期/时间,而不是 TextArea 的内容)
  • 你的脚本是在html内容之后添加的吗?
  • @YassineMoustarham,是的-我很确定这是正常的做法,不是吗?
  • @MrCoder 以防万一!

标签: javascript html function typescript devextreme


【解决方案1】:

我发现通过使用

var val = $("#textArea").dxTextArea("instance").option("value");

允许我获得名为 textArea 的 ID,然后可以在没有方法/函数调用的情况下使用它。

所以现在,我可以使用代码了:

prevErrors.innerText += "\n " + today + ", " + val;

能够将 dxTextArea 的输入获取到数据中。

问题解决了! :)

【讨论】:

    【解决方案2】:

    有几件事需要检查。

    数字 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>

    【讨论】:

    • 感谢您的帮助/建议,我尝试了您的代码 sn-p-,是的,它有效(有点)。但是当我运行程序时,“测试文本”实际上不在 dxTextArea 内(它显示在它上面)。我在我编辑的问题中包含了“完整代码”,但 curError 显然仍然是“未定义”。
    • 在所有数据绑定发生后,您能否按原样共享 HTML?
    • 你的意思是我的完整 HTML 页面?我已将其添加到问题中?
    • 抱歉 - 我的意思是在 data-bind 等属性运行并且元素已更改后会是什么样子(您可能需要使用浏览器中的开发人员工具才能看到这一点)。这将帮助我了解您要获取的文本在哪里,因为在示例 HTML 中,您正在与之交互的任何元素中都没有内容。
    • 由于我使用的是 devExtreme,我实际上无法查看“标记”——但目前,这只是一个测试项目(没有绑定)。我希望在其中一个移动平台(IOS/win/android)上发布它的外观图片 - devextreme 一次性完成所有操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2015-06-19
    • 1970-01-01
    相关资源
    最近更新 更多