You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:46:30