我的xhtml文件中有一个autoComplete组件:
<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
中向p:autoComplete
提供的内容。假设我有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
答案 0 :(得分:2)
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>
注意:应该实现转换器。