"this" 用于 primefaces 组件时指的是什么

What does "this" refer to when used in primefaces components

我的 xhtml 文件中有一个自动完成组件:

<p:autoComplete value="#{locationController.selectedLocation}"
        onblur="LocationEditor.AutoCompleteElementChanged('#{encryptedCategory}','#{encryptedAttribute}', this)"
        forceSelection="true"
        var="currentLocation" itemLabel="#{currentLocation.name}"
        itemValue="#{currentLocation}" converter="#{locationConverter}"
        queryDelay="400"
        completeMethod="#{locationController.autoCompleteLocation}"
        maxResults="10">
        <p:column>
            #{currentLocation.name}
        </p:column>
</p:autoComplete>

在我的 javascript 文件中,AutoCompleteElementChanged 的​​定义如下:

AutoCompleteElementChanged: function(category, attribute, autoCompleteElement) {
    if (autoCompleteElement.value.length < 1)
        return;
    var value = autoCompleteElement.value;
    //do something
}

当我将 this 传递给 javaScript 方法 AutoCompleteElementChanged 时,它的值 (autoCompleteElement.value) 就是我在 itemLabel 中给 itemLabel 的值=17=]。假设我有 itemlLabel="#{currentLocation.id}",那么 autoCompleteElement.value 将是 currentLocation 的 ID。现在因为我有 itemlLabel="#{currentLocation.name}",js 函数在我使用 autoCompleteElement.value.

时给我 currentLocation 的名称

我的问题是 this 到底是什么?它指的是什么?我该如何修改它,而不是获取 itemLabel 的值,而是获取 itemValue 或其他属性的值?因为我在我的 js 函数中需要的是 currentLocation 的 id 而不是它的名字

PS:我尝试将 currentLocation.id 直接传递给我的 javascript 函数而不是 this,但似乎在设置 currentLocation 之前调用了 onblur,所以它给了我错误的 id

this 是自动完成组件生成的 input 的 javascript 对象。

拥有:

<p:autoComplete onblur="console.log(this)"></p:autoComplete>

将登录控制台:

<input id="j_idt26:j_idt34_input" 
       name="j_idt26:j_idt34_input"
       type="text"
       class="ui-autocomplete-input ui-inputfield ui-widget ui-state-default ui-corner-all" 
       autocomplete="off" onblur="console.log(this);" 
       role="textbox" aria-disabled="false"
       aria-readonly="false">

这就是您在输入中填写文本的原因。


为了得到id而不是填充值,你可以使用PF JS对象提供的hinput

<p:autoComplete widgetVar="autoCompleteWV" 
                onblur="console.log(PF('autoCompleteWV').hinput.val())">
</p:autoComplete>

注意:要实现转换器。