boast
Mitglied
Hallo!
Ich habe gerade eine Denkblockade, daher frag ich hier mal ganz frech nach...
Folgendes Problem:
- Ich habe 3 Input Felder (nennen wir sie in1, in2, in3)
- Wenn ich bei in1 was eintippe, sollte es automatisch bei in2 übertragen werden.
- Wenn ich bei in2 was eintippe, sollte es automatisch bei in3 übertragen werden.
- Es sollte so implementiert sein, dass in1 auch gleich in3 füllt bzw. via in2 das ganze via Events weiter gebubbelt wird.
Soweit so gut, jetzt aber:
- Wenn bestehender in1 != in2, soll der bestehende Text bei in2 nicht mehr überschrieben werden.
- Dasselbe gilt für in2 != in3, sollte auch oben genanntes "bubbeln" von in1 zu in3 blocken, ist aber ehr nebensächlich, da kein (sinnvoller) Usecase.
Ich krieg die kriese... Es scheint auf den ersten Blick banal, doch die .key* - Events arbeiten immer entweder mit dem "neuen" Text oder dem "alten" Text (vor oder nach Tastendruck). Hab schon an levenshtein gedacht, was bis jetzt auch die besten Resultate bringt... aber halt nich immer.
Es gibt bestimmt eine gaaaanz einfache Lösung
[edit]
Noch bisschen Code für euch:
Ich habe gerade eine Denkblockade, daher frag ich hier mal ganz frech nach...
Folgendes Problem:
- Ich habe 3 Input Felder (nennen wir sie in1, in2, in3)
- Wenn ich bei in1 was eintippe, sollte es automatisch bei in2 übertragen werden.
- Wenn ich bei in2 was eintippe, sollte es automatisch bei in3 übertragen werden.
- Es sollte so implementiert sein, dass in1 auch gleich in3 füllt bzw. via in2 das ganze via Events weiter gebubbelt wird.
Soweit so gut, jetzt aber:
- Wenn bestehender in1 != in2, soll der bestehende Text bei in2 nicht mehr überschrieben werden.
- Dasselbe gilt für in2 != in3, sollte auch oben genanntes "bubbeln" von in1 zu in3 blocken, ist aber ehr nebensächlich, da kein (sinnvoller) Usecase.
Ich krieg die kriese... Es scheint auf den ersten Blick banal, doch die .key* - Events arbeiten immer entweder mit dem "neuen" Text oder dem "alten" Text (vor oder nach Tastendruck). Hab schon an levenshtein gedacht, was bis jetzt auch die besten Resultate bringt... aber halt nich immer.
Es gibt bestimmt eine gaaaanz einfache Lösung
[edit]
Noch bisschen Code für euch:
Code:
function levenshtein(str1, str2) {
var l1 = str1.length, l2 = str2.length;
if (Math.min(l1, l2) === 0) {
return Math.max(l1, l2);
}
var i = 0, j = 0, d = [];
for (i = 0 ; i <= l1 ; i++) {
d[i] = [];
d[i][0] = i;
}
for (j = 0 ; j <= l2 ; j++) {
d[0][j] = j;
}
for (i = 1 ; i <= l1 ; i++) {
for (j = 1 ; j <= l2 ; j++) {
d[i][j] = Math.min(
d[i - 1][j] + 1,
d[i][j - 1] + 1,
d[i - 1][j - 1] + (str1.charAt(i - 1) === str2.charAt(j - 1) ? 0 : 1)
);
}
}
return d[l1][l2];
}
/**
* Copies every keystroke of input to the outputs value.
*
* @param input jQuery or DOM object or selector
* @param out jQuery or DOM object or selector
*/
function copyInput(input, out) {
$(input).keypress (function(event) {
var _in = $(input), _out = $(out);
if (levenshtein(_in.val(), _out.val()) === 1) {
_out.val(_in.val());
}
});
$(input).keyup (function(event) {
var _in = $(input), _out = $(out);
if (levenshtein(_in.val(), _out.val()) === 1) {
_out.val(_in.val());
}
});
}
copyInput('#in1', '#in2');
copyInput('#in1', '#in3');
copyInput('#in2', '#in3');
Zuletzt bearbeitet: