Primefaces 使按钮在输入文本时启用

Primefaces make button enable on entering text

我有一个 primefaces 输入文本区域和一个 primefaces 按钮。我希望仅当在文本区域中输入任何值时才启用该按钮。

<p:inputTextarea id="dumpnotes" rows="10" cols="90" value="#{postProcessedDump.keyedinContent}" style="color: #000000" styleClass="inputarea" />
<p:commandButton value="Save" actionListener="#{dumpController.saveDumpNotesContent}" update="dumpnotes" oncomplete="PF('dumpNotesSaveSuccessDialog').show();"/>
<p:inputTextarea id="dumpnotes" rows="10" cols="90" value="#{postProcessedDump.keyedinContent}" style="color: #000000" styleClass="inputarea">
     <p:ajax event="keyup" update="saveButton" />
</p:inputTextarea>
<p:commandButton id="saveButton" value="Save" actionListener="#{dumpController.saveDumpNotesContent}" update="dumpnotes" oncomplete="PF('dumpNotesSaveSuccessDialog').show();" disabled="#{empty postProcessedDump.keyedinContent}" />

编辑(根据您的评论):

  • 尝试添加 global="false" 以不触发 ajaxStatus <p:ajax event="keyup" global="false" update="saveButton" />。根据您的 PrimeFaces 版本,您可能需要删除事件名称并只写 <p:ajax global="false" update="saveButton" />

这些问题似乎 JavaScript 相关,所以我会尝试以下方法。

首先我会定义一个 JavaScript 函数来检查是否启用 commandButton:

function validateInput() {
    if(document.getElementById('dumpnotes').value == '') {
        document.getElementById('button').disabled = true;
    } else {
        document.getElementById('button').disabled = false;
    }
}

因此您只需给 commandButton 一个 ID(例如 id="button")并在 inputTextarea 处使用 onkeyup 事件,如下所示:

<p:inputTextarea id="dumpnotes" onkeyup="validateInput()" ... />

希望这就是您要找的。