Smarty模板中jQuery自动填充输入框失败,TypeError报错求解决
解决Smarty模板中jQuery自动填充输入框的问题
看起来你的代码有几个关键问题导致了报错,我来一步步帮你修复:
问题分析
你遇到的Uncaught TypeError: Cannot read property 'replace' of undefined错误,根源在于:
- 你给所有
.button元素绑定了点击事件,包括"Add"和"Order"按钮。当点击"Order"按钮时,$(this).prev()获取的是它前面的<div>元素,而不是输入框,自然拿不到任何属性值,导致fieldID为undefined,后续的replace操作就报错了。 - 你错误地用
attr("hostname-box")去获取class名,hostname-box是输入框的class,不是元素属性,应该用class选择器来定位元素。
修复方案
我们可以通过以下步骤修正代码:
1. 给Order按钮添加唯一标识
先修改Smarty模板里的Order按钮,给它加一个独特的class,避免和Add按钮混淆:
<div> <input class="hostname-box" type="text" name="domain" required="" value=""> <a href="#host" class="button">Add</a> </div> <div> <a href="#submit" class="button order-button">Order</a> </div>
2. 修正jQuery逻辑
重新编写jQuery代码,只给Order按钮绑定事件,并且正确定位输入框,判断为空时填充默认值:
$('.order-button').click(function(e) { // 阻止a标签的默认跳转行为 e.preventDefault(); // 找到对应的hostname输入框 const hostnameInput = $('.hostname-box'); // 判断输入框是否为空(去除首尾空格后检查) if (!hostnameInput.val().trim()) { // 填充通用域名 hostnameInput.val('w1.test.local'); } // 如果需要提交表单,可在此添加提交逻辑 // $('form').submit(); });
代码解释
- 用
.order-button选择器精准绑定Order按钮的点击事件,避免影响Add按钮的功能。 - 调用
e.preventDefault()阻止a标签的默认跳转行为,确保填充逻辑优先执行。 - 直接用
.hostname-box选择器定位输入框,无需复杂的元素遍历操作。 - 通过
!hostnameInput.val().trim()判断输入框是否为真正的空值(排除仅输入空格的情况)。 - 为空时自动填充你需要的通用域名
w1.test.local。
这样修改后,点击Order按钮时就会自动检查输入框状态,为空时填充默认域名,不会再出现报错了。
内容的提问来源于stack exchange,提问作者user8928150
相关产品推荐
相关产品推荐

