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

外部JS无法作用于script标签内的starrr div问题求助

解决KendoGrid RowTemplate中.starrr元素无法被外部JS操作的问题

我来帮你搞定这个问题!你遇到的核心问题其实不是模板在script标签里,而是模板里的元素还没被渲染成DOM节点时,你的外部JS就已经执行了,所以找不到.starrr元素。下面给你两个可行的解决方案:

方案一:保留原有模板,在Grid渲染完成后初始化starrr

不需要移动模板,只要利用KendoGrid的dataBound事件,等所有行都渲染到页面后,再去初始化.starrr组件。

示例代码:

// 初始化KendoGrid时添加dataBound事件
$("#yourGridId").kendoGrid({
  rowTemplate: kendo.template($("#techLangTemplate").html()),
  // 其他Grid配置(数据源、列等)...
  dataBound: function() {
    // 遍历Grid tbody里的所有.starrr元素,初始化它们
    this.tbody.find(".starrr").starrr();
  }
});

为什么这个方法有效?
dataBound事件会在Grid加载完数据、所有行都渲染到DOM之后触发,这时候.starrr元素已经真实存在于页面中,你的JS就能找到并操作它们了。

方案二:将模板移到外部JS文件

如果你确实想把模板从页面的script标签移到外部JS,也很简单——直接把模板定义成一个编译好的Kendo模板变量,不需要id和type属性。

步骤1:在外部JS文件(比如grid-templates.js)中定义模板:

// 把模板字符串编译成Kendo模板,挂载到全局window对象方便调用
window.techLangTemplate = kendo.template(`
  <tr data-uid="#: uid #">
    <td class="name">#: name#</td>
    <td class="vote">
      <div class="starrr"></div>
    </td>
    <td class="actions"></td>
  </tr>
`);

步骤2:在页面的Grid初始化代码中引用这个模板:

$("#yourGridId").kendoGrid({
  rowTemplate: window.techLangTemplate,
  // 其他Grid配置...
  dataBound: function() {
    // 同样要在dataBound里初始化starrr
    this.tbody.find(".starrr").starrr();
  }
});

注意:不管模板是在页面script里还是外部JS里,都必须等模板渲染成DOM元素后再操作.starrr,所以dataBound事件的初始化步骤不能少哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:33:53