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

动态生成的font picker通过JS listener传递正确ID的问题求解

问题根因

你当前的Font Picker逻辑有三处核心错误:

  • jQuery选择器缺失ID前缀#:$('quotetext'+(textcount))没有加#标识,无法正确选中对应ID的元素
  • 闭包变量引用错误:动态生成的监听器直接引用了全局的textcount变量,事件触发时textcount已经是最终累加后的值,不是当前组件生成时对应的序号
  • 没有仿照颜色选择器的逻辑,从触发元素的ID里提取对应序号,完全依赖全局变量导致ID匹配错误

修复方案

调整后的逻辑完全对齐颜色选择器的实现思路,从触发事件的元素属性中提取序号,避免依赖全局临时变量:

<div class="singlecontrol"><span style="vertical-align: middle;">Font Picker</span><input id="font"+textcount+"" type="text" autocomplete="off" ></div>

<script> 
$('#font'+(textcount))
    .fontselect()
    .on('change', function() {
        // 从当前触发事件的输入框ID提取对应序号,和颜色选择器逻辑完全一致
        const idSuffix = this.id.replace("font", "");
        applyFont(this.value, idSuffix);
    });

function applyFont(font, idSuffix) {
    console.log('You selected font: ' + font);
   
    // 将+号替换为CSS可识别的空格
    font = font.replace(/\+/g, ' ');
   
    // 拆分字体家族和字重
    font = font.split(':');
   
    var fontFamily = font[0];
    var fontWeight = font[1] || 400;
   
    // 补全ID选择器前缀#,使用传入的序号匹配对应文本元素
    $('#quotetext'+idSuffix).css({fontFamily:"'"+fontFamily+"'", fontWeight:fontWeight});
}
</script>

同类场景优化建议

后续新增同类动态生成组件的交互逻辑时,统一从事件触发对象的属性中提取对应标识,不要直接依赖生成时的临时变量,即可避免闭包导致的变量引用错误。

内容的提问来源于stack exchange,提问作者Glen Keybit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:03