У меня проблема с версией прототипа в 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, которое присоединяется к текстовому полю ввода на моей странице (через Richfaces a4j: тег suppoer)
<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>
По какой-то причине он не подбирает значение, которое я вставляю, в поле ввода «предложить». Если я вставлю его во второй раз, он получит первое значение, которое я вставил. Например:
Если я вставлю «Tom», запрос ajax отправит, но поле предложения будет пустым. Теперь, вставляя в 'Tom2', я вижу, что отправленное значение предложения было 'Tom' (поле содержит 'TomTom2').
Как я уже говорил, до обновления Richfaces и, следовательно, новой версии Prototype все было в порядке.
Есть идеи?