0

内部に$(document).ready().on('click')イベントハンドラーがあります。これは空のdivにバインドされ、parentContainerと呼ばれます。

クリックハンドラは次のようになります。

$('#parentContainer').on('click', #buttonthatWILLexisteventually, (function() { doStuff(); }));

問題は、私が最終的に操作したいオブジェクトがまだ存在しないことです。.appendTo()jQuery関数を使用して、入力テキストフィールド、ボタン(#buttonthatWILLexisteventuallyを含む)などを#parentContainerに挿入する別の関数があります。

#buttonthatWILLexisteventally(以降#btwee)に実行させたいのは、ボタンがクリックされたときに、それに追加されたテキストフィールドの現在の値を読み取ることです。

$(document).readyをすべて削除し、意味のないHTMLを挿入して、静的HTMLに固執すると、jsfiddleで機能します。

<div class="parentContainer">
        <h2>Server Log</h2>
        <div>
            <input type="text" name="Filter" id="logfilter" value="Filter Log by [id]" />
            <input type="checkbox" id="logdebug" />
            <label for="logdebug">Display Debug Messages</label>
            <button class="changeNestedSetting" id="logclear">Clear</button>
            <button class="changeNestedSetting" id="logview">View Log</button>
        </div>
        <div id="iframediv"></div>
    </div>





  (function () {
    $(document).ready(function () {
        $('.parentContainer').on('click', '#logview',(function(){
            console.log($("#logfilter").val());
            $('<div width="100%" height="600" id="logiframe"></div>').appendTo('div#iframediv');
            var logurlparam =  { filterlog: $("#logfilter").val() };
            var logurl = "echo/html?ID=" + logurlparam["filterlog"];
            $.ajax({
                type: "GET",
                url: logurl,
                dataType: "html",
                success: function (html) {
                    $('<pre>' + html + '</pre>').appendTo('div.log');
                    $('div#logiframe').contents().find('body').append('<pre>' + html + '</pre>');
                }
            });
        }));
    });
    }());

http://jsfiddle.net/Rx3dV/15/

残念ながら、実際の例ではキャッチ22が作成されているようです。クリックハンドラーを親にバインドすると、その親の内部にボタンを作成すると、クリックハンドラーがバインドされますが、テキストフィールドのコンテンツを動的に読み取ることができなくなります。値は常にデフォルト値です(http://jsfiddle.net/k5rD2/1/を参照)。一方、内部コンテンツを作成するコードと同じコードでクリックイベントを実行しようとすると、バインドされません。

これについて私が見た他のほとんどのスレッドは、入力された内容を「推測」するために.keyup()または.keypress()を使用することを推奨しています。これはかなり単純な問題に対するひどい解決策のようですが、まだ私はこれ以上良いものを見つけていません。

更新: JavaScriptプログラマーに今夜私と一緒に私のコードを調べてもらい、私が間違っていることを確認しました。私はなんとか彼を困惑させた。私たちが思いついた唯一のことは、おそらくjquery-ui(ページの他の場所で使用されている)がそれと関係があるということでしたか?

4

1 に答える 1

0

そのため、コード機能していました...非表示のタブのコンテンツにある同じ名前のdivで、これはDOMで作業していたものよりも前のものでした。

jquery-uiでタブを使用していた方法を修正すると、問題が解消されました。

于 2013-02-12T01:59:34.707 に答える