我在Richfaces 3.3.3中遇到了原型版本的问题。
下面列出的代码在升级Richfaces之前工作正常。
Event.observe('#{formName}:suggest', 'paste', this.handleMousePaste.bind(this));
// Trigger keyup event when user copy and pastes data into field. (Using mouse to paste will not work without this fix)
function handleMousePaste(event) {
// Get element object event occured on
var element = Event.element(event);
// Trigger a keyup event which will send ajax request to server (Event already attached in Richfaces code)
triggerEvent(element,'keyup');
}
// Create custom function that will allow us trigger an event anywhere in our javascript code
function triggerEvent(element,event){
if (document.createEventObject)
{
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt)
}
else
{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
它在做什么:
handleMousePaste()正在触发keyup事件,该事件附加到我页面上的输入文本字段(Via Richfaces a4j:suppoer tag)
<h:inputText value="#{myBean.typed}" id="suggest" styleClass="dataTableFilterField">
<a4j:support event="onkeyup" reRender="Table1,tableScroller" ajaxSingle="true" requestDelay="200" ignoreDupResponses="true" eventsQueue="filterQueue"/>
</h:inputText>
由于某种原因,它没有将我粘贴的值粘贴到输入字段'suggest'中。如果我再次粘贴它,它将获取我粘贴的第一个值。例如: 如果我粘贴'Tom',则ajax请求会发送,但建议字段为空。现在粘贴在'Tom2'中我可以看到发送的建议值是'Tom'(该字段包含'TomTom2')。
就像我说的那样,在升级Richfaces之前表现得很好,因此我相信新版本的Prototype。
任何想法?
答案 0 :(得分:0)
管理修复它。适用于有类似问题的人。
// Attach js handlers when page content is fully loaded (Prototype.js framework)
Event.observe(window, 'load', function() {
// Only attach event listener if the element exists on page
if ( $('#{formName}:suggest') ) {
Event.observe('#{formName}:suggest', 'paste', this.handleMousePaste.bind(this));
}
});
// Trigger keyup event when user copies and pastes data into field. (Using mouse to paste will not work without this fix)
function handleMousePaste(event) {
// Need to put a tiny delay in so the element has time to get the pasted in content.
setTimeout(function() {this.triggerEvent($('#{formName}:suggest'),'keyup')}, 10);
}
// Create custom function that will allow us trigger an event anywhere in our javascript code
function triggerEvent(element,event){
if (document.createEventObject)
{
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt);
}
else
{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}