我在JSF页面中有一个,
<textarea id="textarea" rows="4" cols="50"
onKeyPress="validate(event)" onPaste="validatepaste(event)"></textarea>
我不使用<h:inputTextarea>
的原因是因为onPaste
属性似乎在此JSF标签中缺少。
当我在Google Chrome中调试代码时,我惊讶地发现onPaste
属性不存在,渲染的HTML代码是
<textarea id="j_id_2:textarea" name="j_id_2:textarea"
onkeypress="return validate(event)" cols="15" rows="5"></textarea>
由于JSF不过是HTML代码生成器,所以我不明白它对Onpaste属性有什么作用,为什么不支持它?
其次。我将如何在此HTML textarea
上实现价值绑定?
编辑:由于Onkeyup得到了支持,并已标准化为什么 onkeyup 使用<hinputTextarea>
时功能断开?
我无法实现与 html textarea field 。。
以下功能可防止字母文本被"用户通过键盘输入或复制粘贴手动输入。这是片段:
function validate(e) {
console.log(e)
var invalidcharacters = /[^0-9]/gi
var phn = document.getElementById('textarea');
if (invalidcharacters.test(phn.value)) {
//e.value = e.value.replace(invalidcharacters, "");
console.log("REPLACING");
newstring = phn.value.replace(invalidcharacters, "");
phn.value = newstring
}
}
它与普通HTML的正常工作正常,如下所示。在这里JSFIDDLE
<textarea id="textarea" rows="4" cols="50" onkeyup="validate(event)"></textarea>
使用
无法实现相同的功能<h:inputTextarea value="#{myBean.myValue}" id="compTextArea"
onkeyup="validate(event)"></hinputTextarea>
在JS文件方法中用document.getElementById('compTextArea');
替换此行var phn = document.getElementById('textarea');
。
任何季节为什么这看起来很奇怪?
<textarea ... onKeyPress="..." onPaste="...">
首先,JSF使用FACELET作为视图技术。Facelets使用XHTML XML生成HTML。基于骆驼的属性在XHTML中无效。分别是onkeypress
和onpaste
。也许您从中获取这些信息的来源将其与" Onpaste"相混淆。DOM事件处理程序。
<textarea ... onkeypress="..." onpaste="...">
第二, 但是,您可以使用新的JSF 2.2" HTML5友好标记"来实现它。功能:传递属性。 请注意,由于onpaste
属性是不是任何标准规范的一部分。另请参见MDN上的HTMLElement.onpaste
文档。JSF并非旨在生成非标准的代码,因此它不能作为标准<h:inputTextarea>
组件的属性(目前 - 它成为DOM标准的一部分)。<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputTextarea ... a:onpaste="..." />
onpaste
不是当前标准的一部分,因此其功能取决于使用的WebBrowser Make/version所使用的WebBrowser。您的Chrome版本显然不支持它,因此它在其DOM Inspector中是不可见的(但是在RAW HTML源中仍然可见,您可以通过rightClick, view source 或按下 ctrl u )。另请参见: