2016-10-06 28 views
0

プレースホルダ属性をIE8に戻す必要があります。それは、動的に要素を作成するために結合しないただし動的に作成された要素へのスクリプトのバインド

https://github.com/parndt/jquery-html5-placeholder-shim/blob/master/jquery.html5-placeholder-shim.js

:私は伝統的に、このスクリプトは、これを行うための優れていることがわかってきました。したがって、新しい入力がJSのページに追加された場合、プレースホルダは機能しません。

このスクリプトを動的に作成された要素に適用する方法はありますか?

答えて

1

基本的にいいえ。

ほとんどのプラグイン(厳密にはイベントベースではない)と同様に、新しい要素が作成された後にプラグインを初期化する必要があります。

最近のブラウザでは、あなたがMutationObserversのようなものを使用することができますが、あなたがこのプラグインを必要とする理由は、その概念が動作しませんので、古いブラウザをサポートすることです

1

jQuery.placeholder.shim();仕事を呼び出していますか?これはready/loadで呼び出されるメソッドなので、このトリックを行う可能性があります。

もしそうでなければ、少なくともその特定のプラグインを現在のフォームで直接使用することはできません。あなたはおそらくそれを処理するためにソースを変更することができます。

これらはページの読み込み時に動的に生成されますか?これらの要素が生成されるまで、プラグインの読み込みを単に延期できますか?

私が持っている唯一の長所は、プラグインを関数にラップして、各入力が生成された後に呼び出すことができるかどうかです。これは意図しない副作用を伴う可能性がありますが、安価で厄介な選択肢かもしれません。

+0

さらにシムメソッドをソースを見ても、ベストベットのように見えます。 configオブジェクトを準備し、それを$ .fn._placeholder_shimに渡します。これは、すべての重い作業を行います。 shim()メソッドにセレクタを指定するconfigオブジェクトを渡すことで、新しい要素、つまりjQuery.placeholder.shim({selector: 'input#newElement1'})のみを対象とすることができます。 – Brian

+0

最後のアイデアについて何も嫌なことは何も...それは何年もそのように行われてきました。既にセットアップされているクラスにクラスを追加し、not()を使用してそれらをフィルタリングするのは簡単です。 – charlietfl

+0

Nahは、プレースホルダをインスタンス化するメソッドとは対照的に、プラグイン全体を繰り返し呼び出すことを意味しました。ページのすべての入力を繰り返し処理してセレクタを使用しないと、重複するイベントハンドラやその他の混乱のようなものになり、多量の入力を動的に生成してから、すぐにパフォーマンスを向上させることができます問題。この時点で、私は "シム"メソッドに気づいていないと書いていましたが、$( 'selector')._ placeholder-shim()を介して呼び出すと動作しないjQuery.fn._placeholder_shimメソッドだけが必要です。 configオブジェクトです。 – Brian

関連する問題