繁体   English   中英

Javascript 错误:$(...).observe 不是函数

[英]Javascript error: $(…).observe is not a function

我正在尝试在 Tapestry 5.3.7 中使用Stitch onEvent mixin

这是那里的OnEvent Javascript:

T5.extendInitializers({
   onEvent: function (spec) {
      var element = $(spec.id).observe(spec.event, function () {
         var params = {};
         if (spec.fieldIds) {
            for (var i = 0; i < spec.fieldIds.length; ++i) {
               var fieldId = spec.fieldIds[i];
               var paramName = "onEvent." + fieldId;
               var paramValue = $(fieldId).getValue();
               params[paramName] = paramValue;
            }
         }
         var zoneManager = Tapestry.findZoneManagerForZone(spec.zone);
         zoneManager.updateFromURL(spec.url, params);
      });
   }
});

我像这样在我的 TML 中使用它:

<t:form t:id="filterTextForm">
    <div style="float:right">
        <input id="filterText" t:id="filterText" t:type="textfield" 
            t:value="filter" zone="configZone" t:autofocus="literal:true" onClick="this.select()" t:mixins="onEvent" event="keyup"/>
    </div>
</t:form>

我的事件方法是这样的:

void onKeyupFromFilterText(String filter) {
    this.filter = filter;
    
    if (request.isXHR()) {
        ajaxResponseRenderer.addRender(configZone).addRender(descZone);
    }
}

当我有t:mixins="onEvent" event="keyup" ,页面上没有任何区域正在更新,也没有生成 AJAX 请求。

当我删除它时,一切正常,除了我试图做的部分,在我的问题中描述。

我正在使用 Tapestry 5.3.7。

observe() 是一个原型函数。 我猜你正在使用tapestry-jquery ,它是一个第3方库,它删除了原型并将其替换为jquery。

您需要调整 javascript 以使用 jquery(例如,observe() 需要更改为on()

您可能会发现 js 的其他部分也损坏了(例如,我不确定 Tapestry-jquery 的 ZoneManager 是否与核心挂毯完全相同)。

Tapestry-jquery 带有一个内置的bind mixin,它与onevent做类似的工作。 你可能会发现使用这个 mixin 就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM