」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Go/Templ 中製作一個乾淨、友好的 Spinner

在 Go/Templ 中製作一個乾淨、友好的 Spinner

發佈於2024-11-07
瀏覽:552

无用的 HTML

你们可能认为在 HTML 中制作一个一致、干净且专业的旋转框是一项简单的任务...但是,令我们失望的是,没有标准的属性来告诉输入它应该只接受整数或小数值,所有的输入过滤都必须是JS。哎呀!

我将使用 Go、a-h/Templ、Tailwind 和我心爱的 Alpine.js 来实现此功能,让生活变得轻松。

添加骨架

我们首先为整数旋转框编写一个基本模板:

templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) {
  ...
}

我们定义IntInterval如下:

type IntInterval struct {
  A, B int
}

通过间隔,我们将设置输入的最小值和最大值。当我们制作整数旋转框时,步长将始终设置为“1”。

templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) {
  
}

添加 CSS

现在让我们开始添加一些 tw 类,以下是一些控制输入渲染的特殊属性和伪元素。
选择无 [-moz-user-select:none] [-ms-user-select:none] [-o-user-select:none] [-webkit-user-select:none]

以下额外的类用于删除默认的微调按钮:
[&::-webkit-inner-spin-button]:[-webkit-appearance:none] [&::-webkit-outer-spin-button]:[-webkit-appearance:none] [-moz-appearance:文本字段]

最后,让我们添加一些基本的填充、环、颜色等...
块w-full rounded-l-md py-2 px-2.5 text-gray-900ring-1ring-insetring-gray-300占位符:text-gray-400焦点:outline-none焦点:ring-2焦点: ring-primary-400 bg-gray-50 sm:text-sm sm:leading-6

将其添加到我们的模板中,我们得到以下内容:

templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) {
  
}

现在您应该得到一个非常类似于文本的输入,如果您将鼠标悬停在其上,则会进行一些基本验证。我们将在下一节中添加检查有效整数输入的功能。

实施过滤器

整数旋转框的基本思想是接受整数的输入。我最初尝试使用HTML的pattern属性来实现这个功能,如下:

pattern 属性采用正则表达式字符串并使用它来验证用户输入,但是,它并不能阻止首先输入无效输入。实际上,它是为了一些简单的客户端验证而设计的。

'oninput' 事件

每次用户按下输入框中的任意键,都会生成一个 oninput 事件。使用 Alpine 的语法 x-on:input 捕获此事件,并相应地纠正输入元素的值。让我们创建一个带有 x-data 属性集的父 div,并添加一个函数,该函数将允许我们检查输入是否完全是数字...之后我们可以相应地舍入该值。

对于那些不了解Alpine的人,这里的$el用于引用当前的DOM元素。

定制旋转器

在之前创建的父 div 中,我们添加以下 class="flex" 并向输入添加 x-ref="spinbox" 属性,以便我们的按钮可以通过神奇属性 $refs.spinbox 修改其状态:

然后我们在输入后添加一个新的子项,其中将包含我们的按钮:

在这里,我们使用 flex-col-reverse 作为保持 Tab 键顺序正确的简单方法,它应该首先 Tab 键到“-”,然后是“ ”。

然后我们使用 x-on:click 将事件处理程序添加到按钮中,完整代码(不包括 CSS)如下:

在进行任何算术之前,我们必须转换 e.value 和 e.step,因为它们是字符串。

当涉及到旋转按钮的 CSS 时,它们的样式与输入非常相似,完整的代码如下。

Making a Clean, friendly Spinner in Go/Templ

最终模板

templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) {
  
  
@InputLabel(name, label " " interval.toString(), tooltip)
}

享受 :)

适用于

  • Mozilla Firefox 130.0(64 位)
  • 版本 128.0.6613.120(官方版本)(64 位)
版本聲明 本文轉載於:https://dev.to/said_metiche_4820567a55b0/making-an-intspinbox-in-gotempl-3o5l?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 什麼是 FHIR?
    什麼是 FHIR?
    介紹 與 fhir 相關的儲存庫清單 - Awesome-fhir 快速醫療保健互通性資源 FHIR 伺服器是一款強大的工具,徹底改變了醫療保健產業。 它充當存取和交換關鍵醫療資料的網關,實現不同系統和組織之間的無縫互通性。 什麼是 FHIR 伺服器? FHIR...
    程式設計 發佈於2024-11-07
  • 為什麼常數引用可以延長 C++ 中臨時變數的生命週期?
    為什麼常數引用可以延長 C++ 中臨時變數的生命週期?
    透過常數引用擴展右值生命週期在C 中,常量引用不僅充當不可變別名,還可以延長臨時變量的生命週期。為什麼 C 委員會決定要實現此行為? 此功能的一個基本原理是隱藏類別和函數的實作細節。考慮一個可以傳回行向量或列向量的矩陣類別。為了最佳化效能,類別可以選擇根據其行優先或列優先組織傳回內部值的參考。透過要...
    程式設計 發佈於2024-11-07
  • 如何在 Go 中將切片作為可變參數傳遞?
    如何在 Go 中將切片作為可變參數傳遞?
    將解壓縮的切片作為可變參數傳遞在 Go 中,可變參數函數接受不定數量的特定類型的參數。將切片的切片傳遞給此類函數時,了解所涉及的類型轉換和解包機制至關重要。 如果切片包含與可變參數參數類型相同的元素,則可以在不使用切片的情況下傳遞切片拆包。然而,如果切片中包含多種類型的混合或切片中包含切片,情況會變...
    程式設計 發佈於2024-11-07
  • 使用 TypeScript 和語義版本控制建立並發布 npm 庫
    使用 TypeScript 和語義版本控制建立並發布 npm 庫
    ?编写并发布最少的代码 要在 npm 上发布库,您需要: 一个npm 帐户;您可以在这里注册。 您的代码作为一个项目;即,您的代码目录中有一个 package.json,其中指定了名称和版本。请注意,您可以通过以下方式生成此文件: npm init 项目中的index.js。请记住...
    程式設計 發佈於2024-11-07
  • 如何將包含的 PHP 腳本的值傳回主腳本?
    如何將包含的 PHP 腳本的值傳回主腳本?
    從包含的 PHP 腳本返回在 PHP 中,return() 函數通常用於退出腳本或函數。但是,它不能用於從包含的腳本返回到主腳本。 要從包含的腳本返回並恢復主腳本中的執行,請考慮使用以下技術: 1.使用輸出緩衝:在包含的腳本內,使用ob_start() 將要傳回的輸出儲存在變數中。然後,在主腳本中,...
    程式設計 發佈於2024-11-07
  • samwise-CLI:開源 Terraform 模組依賴性追蹤器
    samwise-CLI:開源 Terraform 模組依賴性追蹤器
    地形 Terraform 是一種用 Hashicorp 配置語言 (HCL) 編寫的基礎設施即程式碼 (IaC) 工具。本文假設讀者已經使用 Terraform 並了解模組的工作原理。 在 Terraform 中編碼的每個人都創建了自己的模組,或至少使用了其他人的模組。 ...
    程式設計 發佈於2024-11-07
  • CSS 鮮為人知但有用的功能
    CSS 鮮為人知但有用的功能
    CSS 有一些鲜为人知但有用的功能。我们将研究其中的一些。 1. CSS的scroll-snap-type属性和scroll-snap-stop属性 滚动快速停止 当为父元素下的每个子元素设置此属性时,当您快速滚动屏幕时,使用触控板或触摸屏快速滚动时将阻止下一个元素通...
    程式設計 發佈於2024-11-07
  • PHP中參數替換後如何用PDO確定最終的SQL查詢?
    PHP中參數替換後如何用PDO確定最終的SQL查詢?
    透過PDO 在PHP 中確定最終的SQL 參數化查詢對於存取MySQL 資料庫時在PHP 中透過PDO 進行參數化查詢,獲得最終結果標記替換後的SQL 查詢可能具有挑戰性。 PHP 環境不會保留完整的查詢,因為它將標記的查詢與參數分開傳送到資料庫。 答案 1:如 Ben James 指出的,在 PH...
    程式設計 發佈於2024-11-07
  • 如何在循環中建立動態變​​數名稱:數組方法
    如何在循環中建立動態變​​數名稱:數組方法
    循環中的動態變數名稱在嘗試使用標記 i 在循環中建立動態變​​數名稱時,遇到語法錯誤。為了解決這個問題,讓我們探索一種使用陣列的替代方法。 陣列標記被初始化為空。在循環內,數組的每個元素都被分配一個與第 i 次迭代相對應的值。 var markers = []; for (var i = 0; i ...
    程式設計 發佈於2024-11-07
  • 為什麼 `localhost` 和 `127.0.0.1` 在 PHP 的 `mysql_connect()` 中表現不同?
    為什麼 `localhost` 和 `127.0.0.1` 在 PHP 的 `mysql_connect()` 中表現不同?
    為什麼 localhost 和 127.0.0.1 在 PHP 的 mysql_connect() 中表現不同? 在 mysql_connect() 中使用 localhost 會使連線比使用 127.0.0.1 更快? 在 mysql_connect() 中使用 localhost 和 127.0...
    程式設計 發佈於2024-11-07
  • 城市技術趨勢開發人員指南
    城市技術趨勢開發人員指南
    想像一下,在一個地方,廢物可以轉化為資源,交通順暢,建築物可以自己產生能源。由於科技的進步,這個未來願景正開始成為現實。 我們將在這篇文章中探討城市科技的最新發展,並為開發商如何為更有效率和永續的未來做出貢獻提供實用建議。 好奇城市如何像一個活的有機體一樣思考、呼吸和反應?發現物聯網在智慧城市...
    程式設計 發佈於2024-11-07
  • 如何在Java 8中實作嵌套物件的多層分組?
    如何在Java 8中實作嵌套物件的多層分組?
    Java 8 中的多層分組使用Nested GroupBy本文探討了在處理嵌套類別時如何實現多層分組Java 8 。具體來說,目標是按 key1 欄位對項目進行分組,然後對於每組項目,進一步按 key2 欄位對它們進行分組。最終,輸出應該是一個以 key1 作為外鍵的映射,以及一個 key2 到子項...
    程式設計 發佈於2024-11-07
  • 如何:身份驗證
    如何:身份驗證
    在建立 Web 應用程式時,安全地管理使用者驗證非常重要。兩個重要的庫是: bcryptjs – 用於安全地散列和比較密碼。 JSON Web 令牌 – 用於簽署和驗證 JWT 令牌以進行使用者身份驗證。 我們將介紹如何在 Node.js 應用程式中實作這兩個函式庫,以實現安全密碼管理和基於令牌...
    程式設計 發佈於2024-11-07
  • 如何在 MySQL 分頁中保持隨機排序而不出現重複或固定首頁結果?
    如何在 MySQL 分頁中保持隨機排序而不出現重複或固定首頁結果?
    具有隨機排序的PHP MySQL 分頁在MySQL 分頁中維護隨機排序可能會在試圖防止重複結果並確保不同的集合時帶來挑戰第一頁。以下是這些問題的解決方案:1。防止重複結果要排除後續頁面上先前看到的結果,請使用基於先前提取的行的排除條件來增強 SQL 查詢。利用 PHP 陣列儲存所取得的內容,並在查詢...
    程式設計 發佈於2024-11-07
  • 如何在 PHP 中根據字邊界截斷字串?
    如何在 PHP 中根據字邊界截斷字串?
    在PHP 中根據單字邊界縮短字串在PHP 中,substr() 函數提供了一種截斷字串的便捷方法。但是,預設情況下,它不考慮單字邊界,這可能會導致摘錄不完整或尷尬。 為了解決這個問題,我們可以修改我們的方法來優先保留整個單字。考慮以下程式碼片段:$big = "This is a sent...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3