Project

General

Profile

Actions

Feature #3631

closed

Add onInput() event to WFormWidget

Added by Jesse Pepper over 9 years ago. Updated about 9 years ago.

Status:
Closed
Priority:
Urgent
Assignee:
Target version:
Start date:
10/24/2014
Due date:
% Done:

0%

Estimated time:

Description

Hi All,

I'm trying to write code that gets an event any time the text in a WTextArea and a WLineEdit changes. I'm not content with waiting for the cursor to leave or enter to be pressed etc, as the content of the control must be written to the database as the control's content is changed.

WFormWidget has a changed() event, but this is only fired when the focus is lost etc, I need an event that should be fired any time text() will give a different result. For some time we have been using OnKeyUp events() but this has several problems:

  1. we get many events when there is no change to the text, such as, pressing arrow keys and the like.
  2. crucially, we don't get events when the field is pasted into using the right-click menu from the mouse.

In fact, there appears to be no event that will be triggered immediately after the right-click paste or right-click cut menu options are selected. I suggest changed() should be fired any time the result of text() has changed, however this might break code, so perhaps a new event can be created, though I can't think of a much better name than "changed". Perhaps a flag could be added something like setFineGrainedChangeEvents( bool ).

In the meantime can anyone suggest a workaround for this?

Actions #1

Updated by Jesse Pepper over 9 years ago

By the way, I wonder if this should be considered a bug?

Actions #2

Updated by Wim Dumon over 9 years ago

There seems to be an 'onpaste' event in some browsers, which is non-standard and may have issues. A quick work-around may be:

edit->setAttribute("onpaste", "setTimeout(function(event) {var _this=this; function(){_this.onchanged(event);}}, 0);");

(untested)

BR,

Wim.

Actions #3

Updated by Jesse Pepper over 9 years ago

Hi Wim,

I take it you are suggesting this as a workaround? Can you see the justification for a simple server side changed() event that is triggered every time the result of text() is changed?

Jesse

Actions #4

Updated by Wim Dumon over 9 years ago

Hey Jesse,

In order to avoid confusion for the users of Wt, we most likely won't change the behavior of the current changed signal, since it maps now on what HTML does.

The signal you suggest seems worth to be considered for addition to me, but without further investigation I'm afraid that the need use non-standardized events may be a hell to get it implemented properly.

Best regards,

Wim.

Actions #5

Updated by Jesse Pepper over 9 years ago

Hi Wim,

Doesn't the HTML5 onInput() event do exactly what's necessary? It's supported by all major browsers. See here: http://www.w3schools.com/tags/ev_oninput.asp

Jesse

Actions #6

Updated by Koen Deforche over 9 years ago

  • Subject changed from Missing proper changed() event for WFormWidget to Add onInput() event to WFormWidget
  • Status changed from New to InProgress
  • Assignee set to Koen Deforche
Actions #7

Updated by Koen Deforche about 9 years ago

  • Status changed from InProgress to Resolved
Actions #8

Updated by Koen Deforche about 9 years ago

  • Status changed from Resolved to Closed
Actions

Also available in: Atom PDF