"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>
注意:要实现转换器。
我的 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
.
我的问题是 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>
注意:要实现转换器。