私はAngularJSフレームワークの使用に慣れていましたが、かなり簡単なように見えるバニラJSを使用する際に障害が発生しました。VanillaJSでngモデル双方向データバインディングをエミュレートする
まず、基本的に<textarea>
要素を持ち、その変更をすぐにJSにHTMLに伝播できるようにする必要があります。例えば、(JSの擬似コードで):
<textarea id="#editor" when-changed="foo(newValue)"></textarea>
<p id="#parsedEditor"></p>
function foo(newValue) {
document.getElementByID("#parsedEditor") = bar(newValue);
}
function bar(text) {
return text.replace(" ", "x");
}
私が欲しいものはtextarea
の値が変更されるたびに、それはいくつかのフィルターを通過させますし、それをフロントエンドにレンダリングされるです。 #editor
の値が変更されるたびにこの場合
は、その新しい値は、コールバック関数foo
に送られ、それはbar
フィルタを使用して解析取得し#parsedEditor
を新しい値で更新されます。 AngularJSでは、それは基本的に(正確な構文とベストプラクティスを無視)されます:
<textarea ng-model="text"></textarea>
<p ng-bind-html="parsedText"></p>
function controller($scope) {
$scope.$watch('text', function(newValue, oldValue) {
$scope.parsedText = newValue.replace(" ", "x");
}
}
私はこれを行う方法のためにオンラインで検索、およびMDNに推奨されていなかっただけで、新しい提案された方法と.watch()
あるObject.observe()
を見つけました。さらに、onchange
属性は、textarea
要素が選択解除された後にコールバック関数を呼び出すだけで、値が選択解除されたときに値が変更されないときはいつでも、それを伝播したいと思います。
私が紛失しているJSでこれを行う簡単な方法が必要なような気がしますか?ここで
あなたは "入力"イベントを使用できますか? https://developer.mozilla.org/en-US/docs/Web/Events/input – mcgraphix
@mcgraphixは、HTML5仕様ではありませんか? –
はい。最新のブラウザではかなりサポートされています。 IE 9以前は完全には機能しませんでした。参照してくださいhttp://caniuse.com/#search=input – mcgraphix