2012-04-04 7 views
0

だから私は、このようなコードを試してみてください。functionToCallOnOkを私の関数に渡す理由は、jQuery経由でコールバックにアタッチしたときに呼び出されないのですか?

function showAlertWithCallback(w, h, name, body_text, functionToCallOnOk) { 
    prepareWindow(); 
    var ran_alert_number=Math.random()*50000; 
    $("#alert_content").html(body_text + '<br/>' + '<input type=\"button\" class=\"eButton\" value=\"Cancel\" onClick=$(\".alert\").hide() />' + '<input id=\"general-alert-'+ ran_alert_number +'\" type=\"button\" class=\"eButton\" value=\"OK\" onClick=\"$(\'.alert\').hide();\"/>'); 
$('#general-alert-' + ran_alert_number).click(functionToCallOnOk); 
// also tried $('#general-alert-' + ran_alert_number).click(function(){functionToCallOnOk();}); 
    showAlertBase(w, h, name); 
} 

のようなものを経由して呼び出される:エラーなし(クロームデバッガ)と

showAlertWithCallback(
     600, 
     100 , 
     ('New name for to ' + file_title + ' file.'), 
     '<input type="text" style="width:590px" class="text" value=\"' + file_title + '\">', 
     function(){ 
     alert("hi!"); 
     } 
    ); 

実行されますが、機能は[OK]をクリックに呼び出されません。なぜ、どのようにそのようなものを修正する?

答えて

3

Math.random()*50000このようなセレクタを生成することになるあなたはjQueryの呼び出しで'#general-alert-'と連結38518.060150090605ような数を生成します:ID general-alert-38518持つ要素を検索し、セレクタとして扱われる

#general-alert-38518.060150090605 

クラス名はドットの後に来るので、クラス060150090605です。

乱数を作成するには、代わりにMath.floor(Math.random()*5000)を使用します。

より良いオプションは、グローバル変数(例えば、使用するたびに_global_counter++)を使用することです。同じIDを持つ2つの要素を取得する可能性はありません。

実際のDOM要素をJavaScriptで作成し、その要素にイベントを添付し、の各要素をドキュメントの正しい場所に挿入することがさらに良い解決策です。そうすれば、IDを持つ必要はありません。

+0

それは働いていました!)))すべてのIDと床を使用することを忘れていた... – myWallJSON

0

[OK]ボタンのonClick属性を削除してみます。

関連する問題