在input光標處插入內容,并解決TS報錯

在input或者textarea的光標處插入內容,如果是鍵盤輸入倒是好說,直接把光標定位過去,鍵盤打字就可以了;如果在光標處插入內容呢,稍微費點事,倒是不是問題;但ts總是希望把一切弄得規范一些,所以正常寫不行,需要加一些內容規范起來,這一小節,我們來看一下。

目錄

1 在input光標插入內容

2 TS報錯解決

2.1 報錯信息?'inputBox' is possibly 'null'.ts

2.2 報錯信息??Property 'selectionStart' does not exist on type 'HTMLElement'.ts

2.3? 報錯信息?'cursorPosition' is possibly 'null'.ts

3 使用ts的好處?


1 在input光標插入內容

例如我們有一個輸入框,id定義為?inputBox ,有個按鈕,調用一個方法insertText(),代碼可以這樣寫:

<!-- HTML部分 -->
<input type="text" id="inputBox" value="ABCDE">
<button onclick="insertText()">插入文本</button>// javascript部分
function insertText() {var inputBox = document.getElementById("inputBox"); // 獲取輸入框元素var text = "好"; // 要插入的文本var cursorPosition = inputBox.selectionStart; // 獲取光標位置var textBeforeCursor = inputBox.value.substring(0, cursorPosition); // 獲取光標前的文本var textAfterCursor = inputBox.value.substring(cursorPosition); // 獲取光標后的文本var newText = textBeforeCursor + text + textAfterCursor; // 組合新的文本inputBox.value = newText; // 更新輸入框的值
}

這里的本質就是實用input組件的?selectionStart 屬性來獲取當前光標的位置,或者是索引,很簡單。

2 TS報錯解決

2.1 報錯信息?'inputBox' is possibly 'null'.ts

這里說的是inputBox 這個DOM元素,很可能是獲取不到的,就會是空,會是null,這在后續的代碼中就會帶來一些意想不到的問題,所以,我們后續在使用inputBox的時候,應該添加判斷,要求inputBox一定是存在的,才能繼續向下執行

function insertText() {var inputBox = document.getElementById("inputBox"); // 獲取輸入框元素if (inputBox) {var text = "好"; // 要插入的文本var cursorPosition = inputBox.selectionStart; // 獲取光標位置var textBeforeCursor = inputBox.value.substring(0, cursorPosition); // 獲取光標前的文本var textAfterCursor = inputBox.value.substring(cursorPosition); // 獲取光標后的文本var newText = textBeforeCursor + text + textAfterCursor; // 組合新的文本inputBox.value = newText; // 更新輸入框的值}
}

2.2 報錯信息??Property 'selectionStart' does not exist on type 'HTMLElement'.ts

這是因為 TypeScript 類型系統并不知道 <input> 元素具有 selectionStartselectionEnd 這些屬性。要解決這個問題,你可以將輸入框的類型聲明為 HTMLInputElement,因為這個類型包含了這些屬性。修改后的代碼為:

function insertText() {var inputBox = document.getElementById("inputBox") as HTMLInputElement;; // 獲取輸入框元素if (inputBox) {var text = "好"; // 要插入的文本var cursorPosition = inputBox.selectionStart; // 獲取光標位置var textBeforeCursor = inputBox.value.substring(0, cursorPosition); // 獲取光標前的文本var textAfterCursor = inputBox.value.substring(cursorPosition); // 獲取光標后的文本var newText = textBeforeCursor + text + textAfterCursor; // 組合新的文本inputBox.value = newText; // 更新輸入框的值}
}

2.3? 報錯信息?'cursorPosition' is possibly 'null'.ts

這里呢,他又擔心獲取到的cursorPosition值是空,會是null,那這樣后續再利用它獲取光標的位置就又可能報錯了,所以繼續修改代碼為

function insertText() {var inputBox = document.getElementById("inputBox") as HTMLInputElement;; // 獲取輸入框元素if (inputBox) {var text = "好"; // 要插入的文本var cursorPosition = inputBox.selectionStart || 0; // 獲取光標位置var textBeforeCursor = inputBox.value.substring(0, cursorPosition); // 獲取光標前的文本var textAfterCursor = inputBox.value.substring(cursorPosition); // 獲取光標后的文本var newText = textBeforeCursor + text + textAfterCursor; // 組合新的文本inputBox.value = newText; // 更新輸入框的值}
}

3 使用ts的好處?

通過這么簡簡單單的一小段代碼,就發現了那么多可能會出現的問題,可以說使用ts,能夠規避非常多因為JS弱類型,或者是不確定值所帶來的問題,使用ts的好處可見一斑。但缺點也有,你越著急寫代碼,它越給你報錯,你越不熟悉,它問題越多。

這還不是重點,重點是你用了ts,團隊都熟練使用了,加班還是少不了,線上問題還是一樣的出,復盤的時候一個個的都很懂,結果下次還是外甥打燈籠。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10255.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Codeforces Round 134 (Div. 1) A. Ice Skating (并查集)

Ice Skating 題面翻譯 Description 給出n個點的橫縱坐標&#xff0c;兩個點互通當且僅當兩個點有相同的橫坐標或縱坐標&#xff0c;問最少需要加幾個點才能使得所有點都兩兩互通 Input 第一行一個整數n表示點數&#xff0c;之后n行每行兩個整數x[ i ]和y[ i ]表示第i個點的…

關于Windows驅動中DPC同步的一些見解說明

DPC會被分配到不停的CPU核心上,如果分配到同一個核心,那么DPC是串行的,如果分配到不同的CPU核心上,那么DPC是并行的,但如果設置WDF_OBJECT_ATTRIBUTES的SynchronizationScope屬性為WdfSynchronizationScopeDevice,那么即便CPU有多核,DPC也不會在不同的核心上并發,因為系…

零基礎HTML教程(32)--HTML5語義化標簽

文章目錄 1. div時代2. div的缺點3. 語義化標簽4. 語義化標簽有哪些5. 實戰演練6. 小結 1. div時代 我是2009年開始學習網頁開發的&#xff0c;那時候HTML里面到處是div。 這么說吧&#xff0c;那時候div就是網頁的骨架&#xff0c;支撐著網頁的主結構。 2. div的缺點 div作…

使用J-Link Commander / JFlash 燒寫固件程序(以STM32F103C8T6為例)

使用JFlash 燒寫流程 運行JFlash, 點擊Project Settings 配置Jlink為SWD方式,選擇連接設備為STM32F103C8T6, 點擊確定. 選擇要燒錄的Bin文件 設置bin文件燒錄地址, 點擊OK(地址要在0x08000000-0x0800FFFF范圍內) Note : STM32F103C8T6 Flash大小為 64KB&#xff0c; 地址范圍…

速盾可以防御的攻擊類型是否會隨著技術的發展而不斷變化?

隨著技術的發展&#xff0c;網絡攻擊的形式也在不斷演變。因此&#xff0c;速盾作為一種網絡安全防護技術&#xff0c;也需要不斷更新和改進&#xff0c;以應對新的攻擊類型。本文將從技術發展的角度探討速盾如何應對不斷變化的攻擊類型。 首先&#xff0c;隨著技術的進步&…

Vuex,在 Vue 組件中監聽 Vuex 狀態變化,使用watch監聽Vuex中的數據

簡介&#xff1a;在Vue應用程序中使用Vuex進行狀態管理時&#xff0c;經常需要在組件中響應狀態的變化。這里來記錄一下 一. 在使用 Vuex 進行狀態管理時&#xff0c;我們經常需要在組件中響應狀態的變化。Vue 提供了兩種方式來實現這一點&#xff1a;computed 屬性和 watch 選…

重生奇跡mu再生寶石怎么用有什么用

重生奇跡mu再生寶石有2個用處&#xff1a; 1、在瑪雅哥布林處給380裝備加PVP屬性4追4以上的380級裝備,守護寶石一顆,再生寶石一顆,成功得到PVP裝備,失敗寶石消失,裝備無變化&#xff1b; 2、給非套裝點強化屬性用法跟祝福,靈魂,生命一樣直接往裝備上敲,成功得到隨機強化屬性一…

八. Django項目之電商購物商城 -- 添加郵箱

Django項目之電商購物商城 – 添加郵箱 一. 用戶中心 添加郵箱功能在用戶中心中 , 先完善用戶中心功能 1. 視圖 # 用戶中心 class UserInfoCenterView(LoginRequiredMixin,View):def get(self , request):context {username : request.user.username,mobile : request.use…

隊列的實現以及隊列如何實現棧

一、隊列的定義 隊列&#xff1a;只允許在一端進行插入數據操作&#xff0c;在另一端進行刪除數據操作的特殊線性表&#xff0c;隊列具有先進先出 FIFO(First In First Out) 入隊列&#xff1a;進行插入操作的一端稱為 隊尾 出隊列&#xff1a;進行刪除操作的一端稱為 隊頭 …

20240507 ubuntu20.04+ros noetic 跑通lioslam

任務&#xff1a;跑通lioslam 主要參考博客 IMU激光雷達融合使用LIO-SAM建圖學習筆記——詳細、長文、多圖、全流程_ubuntu_AIDE回歸線-GitCode 開源社區 (csdn.net) 1.不要用這一句 wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2…

【Spring】初識 Spring AOP(面向切面編程)

目錄 1、介紹AOP 1.1、AOP的定義 1.2、AOP的作用 1.3、AOP的核心概念及術語 2、AOP實現示例 3、EnableAspectJAutoProxy注解 1、介紹AOP 1.1、AOP的定義 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;直譯過來就是面向切面編程&#xff0c;AOP 是一…

Windows Python 安裝準備

首先安裝配置 1. 環境的安裝和配置: 運行環境: 官方提供了cpython解釋器 編輯環境: 課程初級階段:推薦大家使用: 記事本工具(UE、notepad++、editplus、sublime、vscode) 中期階段IDE的使用,pycharm 2. 安裝python環境: 在官方下載python解釋器 www.python.org …

Ubuntu18.04--虛擬機配置Samba并從Windows登錄

前言&#xff1a; 本文記錄我自己在Windows上安裝 Virtualbox &#xff0c;并在Virtualbox中安裝 Ubuntu-18.04 虛擬機&#xff0c;在Ubuntu-18.04虛擬機里安裝配置Smaba服務器&#xff0c;從 Windows 宿主系統上訪問虛擬機共享samba目錄的配置命令。 引用: N/A 正文 虛擬…

[C++][數據結構]哈希3:unordered_map和unordered_set的模擬實現

前言 今天我們來試著用哈希封裝一下unordered_map和unordered_set這兩個容器 由于主要的哈希的模擬實現都在之前的文章中&#xff0c;所以本文只是對于幾個小問題進行說明 KeyOfT&#xff1a;取出key 因為我們傳的第二個模板參數是T&#xff0c;我們不知道他是key還是pair&l…

Three.js的材質Material信息

Material材質信息,是獨立于物體頂點之外,與渲染效果相關的屬性。比如通過設置材質可以改變物體的顏色、紋理貼圖、光照模式等等。 基本材質【BasicMaterial】 基本材質BasicMaterial的物體,顏色不會因為光照產生明暗、陰影效果。如果沒有指定的材質顏色,那么顏色就是隨機…

協同過濾的一些理解

協同過濾的一些理解 以下是我對協同過濾的一些理解&#xff0c;歡迎來交。 什么是協同過濾 協同過濾&#xff1a;利用相似用戶的行為或相似商品的特征來進行推薦。 協同過濾&#xff08;Collaborative Filtering, CF&#xff09;是推薦系統中一種常用的技術&#xff0c;它基于…

揭秘LLMOps,高效開發大型語言模型

大家好&#xff0c;隨著人工智能&#xff08;AI&#xff09;的蓬勃發展&#xff0c;一個新興領域語言模型運維&#xff08;LLMOps&#xff09;正逐漸成為關注的焦點。LLMOps專注于對大型語言模型&#xff08;LLMs&#xff09;&#xff0c;例如OpenAI的GPT系列&#xff0c;進行全…

SpringBoot Actuator未授權訪問漏洞的解決方法

1. 介紹 Spring Boot Actuator 是一個用于監控和管理 Spring Boot 應用程序的功能模塊。它提供了一系列生產就緒的功能&#xff0c;幫助你了解應用程序的運行狀況&#xff0c;以及在運行時對應用程序進行調整。Actuator 使用了 Spring MVC 來暴露各種 HTTP 或 JMX 端點&#x…

【機器學習】卷積神經(CNN)在圖像識別中的革命性應用:自動駕駛的崛起

卷積神經網絡&#xff08;CNN&#xff09;在圖像識別中的革命性應用&#xff1a;自動駕駛的崛起 一、卷積神經網絡&#xff08;CNN&#xff09;的基本原理二、CNN在圖像識別中的顯著成果三、CNN在自動駕駛汽車中的物體檢測和識別四、CNN在圖像識別中的代碼實例 隨著人工智能和深…

輪式機器人簡介

迄今為止,輪子一般是移動機器人學和人造交通車輛中最流行的運動機構。它可達到很高的效率, 如圖所示, 而且用比較簡單的機械就可實現它的制作。 另外,在輪式機器人設計中,平衡通常不是一個研究問題。 因為在所有時間里,輪式機器人一般都被設計成在任何時間里所有輪子均與地接…