79273113

Date: 2024-12-11 20:42:24
Score: 1
Natty:
Report link

I had a similar problem where I needed to obtain the correct value that a user's keypress would generate to evaluate it properly, so I learned from other answers here and wrote my own.

function getNewValue(evt) {
    var start = evt.target.selectionStart,
        end = evt.target.selectionEnd,
        charCode = (evt.which) ? evt.which : evt.keyCode,
        original = $(evt.target).val(),
        char = String.fromCharCode(charCode),
        newer = "", inserted = false, single = 0;
    
    if (start == end) single = 1;

    if (original.length > 0) {
        for (var i = 0; i < original.length; i++) {
            if (!inserted) {
                if (single && i == start) {
                    newer += char + original[i];
                    inserted = true;
                } else if (!single && i == start) {
                    newer += char; inserted = true;
                } else
                    newer += original[i];
            } else {
                if (single)
                    newer += original[i];
                else if (i < start || i >= end)
                    newer += original[i];
            }
        }
        if (!inserted) newer += char;
    } else newer += char;

    console.log("newer: " + newer);
    // You can add conditions here to evaluate "newer".
    // Use "return false" to reject "newer".
}

I use this function by adding the following to the HTML element that I want to evaluate:

onkeypress="return getNewValue(event)"

I haven't had any problems with it, but I'll update this answer if I find a better alternative or notice any problems.

Reasons:
  • Blacklisted phrase (0.5): I need
  • RegEx Blacklisted phrase (1): I want
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (1):
Posted by: Luis Gojon