0

「行を追加」ボタンのあるテーブルがあります。このボタンは、JQueryを使用して動的に行を追加します。これは、最初の...をコピーしてから、すべてのid =".."を増分番号に置き換えることで機能します。

問題は、行に次のようなYUIオートコンプリートがあることです。

<td>
    <input type="hidden" name="location_num[0]" value="508318" maxLength="25" style="width:230px" id="location_num[0]"/>
    <input type="textbox" name="location_numDisplayDesc[0]" value="WINNIPEG" maxLength="25" style="width:230px" id="location_numDisplayDesc[0]"/>
    <div id="Container_location_num[0]" style="display:inline;"></div>

    <script type="text/javascript">

        // Initialize autocomplete
        var location_numAC = new YAHOO.widget.AutoComplete(
            "location_numDisplayDesc[0]",
            "Container_location_num[0]",
            locationDataSource,
            acConfig);

        location_numAC.useShadow = true
        location_numAC.useIFrame = true
        location_numAC.dataErrorEvent.subscribe(acErrorFunction);

        // Format results to include the reference number
        location_numAC.formatResult = function(resultItem, query) {
            return resultItem[0];
        };

        // Clear key before request
        location_numAC.dataRequestEvent.subscribe(function fnCallback(e, args) {
        YAHOO.util.Dom.get("location_num[0]").value = ""; });

        // Set key on item select
        location_numAC.itemSelectEvent.subscribe(function(event, args) {
            YAHOO.util.Dom.get("location_num[0]").value = args[2][1];
        });

        // Clear key when description is cleared
        location_numAC.textboxBlurEvent.subscribe(function fnCallback(e, args) {
            if (isEmpty(YAHOO.util.Dom.get("location_numDisplayDesc[0]").value)) {
                YAHOO.util.Dom.get("location_num[0]").value = "";
            } // end if
        });
    </script>
</td>

このコードはFirefoxで正常に機能し、新しく作成されたオートコンプリートは機能しますが、IE(6および7)では、location_num_ACが正常に作成されていないことを意味するエラーが発生します。新しく作成された入力またはdivを正しく読み取っていないためだと思います。javascriptをでラップしてみました

$("Container_location_num[0]").ready(function {...});

しかし、それはうまくいかなかったようです。他に何かアイデアはありますか?

4

1 に答える 1

2

IEのDOMに挿入されるフォームフィールドは、期待どおりにフォームコレクションに追加されません。

通常、フォームフィールドは次の2つの方法のいずれかで参照できます。

document.forms[0]["myFormName"];
document.forms[0][12];

つまり、フォームフィールド名またはインデックスによって。ただし、IEのDOMにフォームフィールドを追加する場合、名前で参照することはできず、インデックスでのみ参照できます。コード(またはサポートコード)がコレクション内のフォームフィールドをその名前で探している場合は、明らかに問題があります。

唯一のキーが名前である場合、インデックスによってすべてのフォームフィールドをループし、探しているものを見つけることができますが、それは明らかに線形操作になります。また、ループして、名前ではなく数値でインデックス付けされているフォームフィールドを見つけて、フォームオブジェクトを自分で更新することもできます。

これがプロジェクトでどのように発生しているか(または発生しているかどうか)を知るのに十分な詳細はありませんが、フィールドを動的に追加しているため、これが役割を果たしているように聞こえるIEの癖の1つです。

于 2009-11-09T22:27:57.533 に答える