Frage

ich nach einem Weg suchen Eingang zu sanieren, die ich in den Browser einfügen, ist dies mit jQuery zu tun?

Ich habe es geschafft, mit diesem zu kommen, so weit:

$(this).live(pasteEventName, function(e) {
 // this is where i would like to sanitize my input
 return false;
}

Leider hat meine Entwicklung zu einem abrupten Halt gekommen, weil dieses „kleinen“ Problems. Ich würde mich wirklich ein glücklicher Mensch, wenn jemand mich in die richtige Richtung zeigen könnte.

War es hilfreich?

Lösung 4

Ich reparierte Art durch den folgenden Code:

$("#editor").live('input paste',function(e){
    if(e.target.id == 'editor') {
        $('<textarea></textarea>').attr('id', 'paste').appendTo('#editMode');
        $("#paste").focus();
        setTimeout($(this).paste, 250);
    }
});

Jetzt muss ich die Einfügemarke Lage nur speichern und zu dieser Position hängen Sie dann bin ich ganz eingestellt ... Ich denke:)

Andere Tipps

OK, nur stößt in das gleiche Problem .. Ich ging um den langen Weg

$('input').on('paste', function () {
  var element = this;
  setTimeout(function () {
    var text = $(element).val();
    // do something with text
  }, 100);
});

Nur eine kleine Auszeit bis .val () Func bevölkert erhalten kann.

E.

Sie können tatsächlich den Wert greifen direkt aus dem Ereignis . Es ist ein bisschen stumpf, wie wenn es zu erhalten.

false zurück, wenn Sie es nicht wollen gehen.

$(this).on('paste', function(e) {

  var pasteData = e.originalEvent.clipboardData.getData('text')

});

Für Cross-Plattform-Kompatibilität sollte damit umgehen oninput und onpropertychange Ereignisse:

$ (something).bind ("input propertychange", function (e) {
    // check for paste as in example above and
    // do something
})

Hmm ... I denken Sie e.clipboardData verwenden können, die Daten zu fangen eingefügt werden. Wenn es nicht aus, schwenken, schauen Sie hier .

$(this).live("paste", function(e) {
    alert(e.clipboardData); // [object Clipboard]
});

Listen für die Paste Ereignis und legen Sie einen keyup Ereignis-Listener. Auf keyup, erfassen den Wert und entfernen Sie den keyup Ereignis-Listener.

$('.inputTextArea').bind('paste', function (e){
    $(e.target).keyup(getInput);
});
function getInput(e){
    var inputText = $(e.target).val();
    $(e.target).unbind('keyup');
}

Dies ist immer näher an, was Sie möchten.

function sanitize(s) {
  return s.replace(/\bfoo\b/g, "~"); 
};

$(function() {
 $(":text, textarea").bind("input paste", function(e) {
   try {
     clipboardData.setData("text",
       sanitize(clipboardData.getData("text"))
     );
   } catch (e) {
     $(this).val( sanitize( $(this).val() ) );
   }
 });
});

Bitte beachten Sie, dass, wenn clipboard Objekt wird nicht gefunden (auf anderen Browsern dann IE) Sie zur Zeit des Elements vollen Wert erhalten + den clipboard'ed Wert.

Sie können sich wahrscheinlich einige zusätzliche Schritte tun, um die beiden Werte dif, vor dem Eingang und nach der Eingabe, wenn Sie wirklich erst nach sind, welche Daten in das Element wirklich eingefügt.

Wie wäre es den ursprünglichen Wert des Feldes und den geänderten Wert des Feldes zu vergleichen und die Differenz als dem eingefügten Wert abgezogen? Dies fängt den eingefügten Text korrekt, selbst wenn es vorhandenen Text in das Feld ein.

http://jsfiddle.net/6b7sK/

function text_diff(first, second) {
    var start = 0;
    while (start < first.length && first[start] == second[start]) {
        ++start;
    }
    var end = 0;
    while (first.length - end > start && first[first.length - end - 1] == second[second.length - end - 1]) {
        ++end;
    }
    end = second.length - end;
    return second.substr(start, end - start);
}
$('textarea').bind('paste', function () {
    var self = $(this);
    var orig = self.val();
    setTimeout(function () {
        var pasted = text_diff(orig, $(self).val());
        console.log(pasted);
    });
});
 $('').bind('input propertychange', function() {....});                      

Dies wird für Maus Paste Ereignis arbeiten.

Dieser Code funktioniert für mich entweder Paste aus dem rechten Maustaste oder direkte Kopieren und Einfügen

   $('.textbox').on('paste input propertychange', function (e) {
        $(this).val( $(this).val().replace(/[^0-9.]/g, '') );
    })

Wenn ich Section 1: Labour Cost Paste wird es 1 in Textfeld ein.

Um nur float-Wert erlaubt ich verwende diesen Code

 //only decimal
    $('.textbox').keypress(function(e) {
        if(e.which == 46 && $(this).val().indexOf('.') != -1) {
            e.preventDefault();
        } 
       if (e.which == 8 || e.which == 46) {
            return true;
       } else if ( e.which < 48 || e.which > 57) {
            e.preventDefault();
      }
    });
$("#textboxid").on('input propertychange', function () {
    //perform operation
        });

Es wird funktionieren.

document.addEventListener('paste', function(e){
    if(e.clipboardData.types.indexOf('text/html') > -1){
        processDataFromClipboard(e.clipboardData.getData('text/html'));
        e.preventDefault();

        ...
    }
});

Weitere:

Sehen Sie folgendes Beispiel: http://www.p2e.dk/diverse/detectPaste.htm

Es verfolgt essentialy jede Änderung mit oninput Ereignis und dann überprüft, ob es sich um eine Paste durch String-Vergleich ist. Oh, und im Internet Explorer gibt es ein onpaste Ereignis. Also:

$ (something).bind ("input paste", function (e) {
    // check for paste as in example above and
    // do something
})

Diese Methode verwendet jqueries Inhalt (). Auszupacken ().

  1. Zunächst erfassen die Paste Ereignis
  2. Fügen Sie eine einzigartige Klasse zu den Tags, die bereits in dem Element sind, in die wir einfügen.
  3. Nach einem gegebenen Zeitüberschreitung die alle Inhalte scannen durch Tags auspackt, die, die Sie zuvor nicht setzen die Klasse haben. Hinweis: Diese Methode keine Tags selbstschließend wie
    nicht entfernt Sehen Sie ein Beispiel unten.

    //find all children .find('*') and add the class .within .addClass("within") to all tags
    $('#answer_text').find('*').each(function () {
    $(this).addClass("within");
    });
    setTimeout(function() {
    $('#answer_text').find('*').each(function () {
        //if the current child does not have the specified class unwrap its contents
        $(this).not(".within").contents().unwrap();
    });
    }, 0);
    

Dies erwies sich als ziemlich illusorisch sein. Der Wert des Eingangs wird nicht vor der Ausführung des Codes in der Paste Ereignisfunktion aktualisiert. Ich habe versucht, andere Ereignisse aus der Paste Event-Funktion aufrufen, aber der Eingangswert wird immer noch nicht mit dem eingefügten Text innerhalb der Funktion von irgendwelchen Ereignissen aktualisiert. Das heißt alle Ereignisse außer keyup. Wenn Sie keyup aus der Paste Event-Funktion aufrufen können Sie den eingefügten Text aus der keyup Event-Funktion sanieren. wie so ...

$(':input').live
(
    'input paste',
    function(e)
    {
        $(this).keyup();
    }
);

$(':input').live
(
    'keyup',
    function(e)
    {
        // sanitize pasted text here
    }
);

Es gibt eine Einschränkung hier. In Firefox, wenn Sie den Eingabetext auf jedem keyup zurückgesetzt, wenn der Text länger als der sichtbare Bereich durch die Eingangsbreite erlaubt ist, dann wird der Wert auf jeder Neueinstellung keyUp die Browser-Funktionalität bricht, dass die automatische scrollt der Text in die Position der Einfügemarke an der Ende des Textes. Stattdessen wird der Text läuft zurück zum Anfang Verlassen des caret aus der Sicht.

Skript Sonderzeichen aus allen Bereichen mit Klasse-Portlet-form-Eingabe-Feld zu entfernen:

// Remove special chars from input field on paste
jQuery('.portlet-form-input-field').bind('paste', function(e) {
    var textInput = jQuery(this);
    setTimeout(function() {
        textInput.val(replaceSingleEndOfLineCharactersInString(textInput.val()));
    }, 200);
});

function replaceSingleEndOfLineCharactersInString(value) {
    <%
        // deal with end-of-line characters (\n or \r\n) that will affect string length calculation,
        // also remove all non-printable control characters that can cause XML validation errors
    %>
    if (value != "") {
        value = value.replace(/(\x00|\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0B|\x0C|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F|\x7F)/gm,'');
        return value = value.replace(/(\r\n|\n|\r)/gm,'##').replace(/(\#\#)/gm,"\r\n");
    }
}
  

Es gibt eine Einschränkung hier. In Firefox, wenn Sie den Eingabetext auf jedem keyup zurückgesetzt, wenn der Text länger als der sichtbare Bereich durch die Eingangsbreite erlaubt ist, dann wird der Wert auf jeder Neueinstellung keyUp die Browser-Funktionalität bricht, dass die automatische scrollt der Text in die Position der Einfügemarke an der Ende des Textes. Stattdessen wird der Text läuft zurück zum Anfang Verlassen des caret aus der Sicht.

function scroll(elementToBeScrolled) 
{
     //this will reset the scroll to the bottom of the viewable area. 
     elementToBeScrolled.topscroll = elementToBeScrolled.scrollheight;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top