Javascript 手动更改火灾事件

Javascript 手动更改火灾事件,javascript,events,jsf,primefaces,onchange,Javascript,Events,Jsf,Primefaces,Onchange,嘿,我在手动触发更改事件时遇到问题 因此,我有一个selectOneMenu(就像jsf中的下拉菜单)具有不同的值 如果我选择此下拉列表的值,则应更新datatable。如果手动选择此值,则此操作正常 现在有一种情况,我需要在selectOneMenu中插入一个新值。自动选择此新值,但不会触发更新datatable的更改事件 基本上,我用这个按钮将一个新值保存到selectOneMenu,然后它被正确选择,但是datatable没有得到更新,这就是为什么我试图编写函数fireChange(),并

嘿,我在手动触发更改事件时遇到问题

因此,我有一个selectOneMenu(就像jsf中的下拉菜单)具有不同的值

如果我选择此下拉列表的值,则应更新datatable。如果手动选择此值,则此操作正常

现在有一种情况,我需要在selectOneMenu中插入一个新值。自动选择此新值,但不会触发更新datatable的更改事件

基本上,我用这个按钮将一个新值保存到selectOneMenu,然后它被正确选择,但是datatable没有得到更新,这就是为什么我试图编写函数fireChange(),并将其提供给按钮的oncomplete:

<p:commandButton ajax="true" id="seatingPlanSave" actionListener="#{EventAssistentController.createSeatingPlan}" value="#{msg.save}" update=":createEvent:EventSeatingPlan, :createEvent:ticketTypePrices" oncomplete="fireChange()"/>
但这些都不起作用:(

你能告诉我怎样才能做到这一点吗


谢谢,Xera

您没有告诉我们任何关于
createEvent:EventSeatingPlan\u input的HTML表示,而这对我们(和您)来说是强制性的为了知道如何让JS拦截它。你既没有告诉你是在使用
还是
,因此我们无法查看生成的HTML表示。前者生成一个
,而后者生成一个
,它与一个隐藏的
交互。这两种表示都是在JS中,下拉菜单需要不同的方法。此外,有关如何注册
更改
事件处理程序函数的信息是必需的。是通过硬更改
onchange
属性,还是通过嵌入

无论如何,根据目前提供的信息,我猜你有一个


这将生成一个

根据您的第一次尝试:

function fireChange() {
    var element = document.getElementById("createEvent:EventSeatingPlan_input");
    element.change();
}
这将在
上失败,因为接口没有
change
属性或方法。相反,它是
onchange
属性,返回一个事件处理程序,可通过追加
()
直接调用该处理程序

以下内容适用于

然而,这反过来会在
中失败,因为它返回
htmlvelement
而不是
HtmlSelectElement
htmlvelement
没有返回事件处理程序的
onchange
属性。如上所述,
生成一个与hidd交互的
小部件您应该在JS上下文中注册此小部件,然后使用其特殊的
triggerChange()
方法

因此,如果

<p:selectOneMenu widgetVar="w_menu" ...>
    <p:ajax update="dateTableId" />
</p:selectOneMenu>

哇,非常感谢您的回答!我使用了一个,正如您建议的widgetVar和特殊的triggerChange方法,它现在工作得非常好:-)再次感谢,祝您有一个愉快的一天
function fireChange() {
    var element = document.getElementById("createEvent:EventSeatingPlan_input");
    element.onchange();
}
<p:selectOneMenu widgetVar="w_menu" ...>
    <p:ajax update="dateTableId" />
</p:selectOneMenu>
function fireChange() {
    w_menu.triggerChange();
}