0

だから私はそのようなコードを試します:

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!");
       }
    );

エラーなしで実行されます (chrome デバッガー) が、[OK] をクリックしても関数が呼び出されません。そのようなことを修正する理由と方法は?

4

2 に答える 2

3

Math.random()*50000'#general-alert-'jQuery 呼び出しで連結すると、次のようなセレクターが生成されます。

#general-alert-38518.060150090605

クラス名はドットの後に来るので、それはidgeneral-alert-38518と classを持つ要素を見つけるセレクターとして扱われます。060150090605

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

より良いオプションは、増加するグローバル変数を使用することです (たとえば、_global_counter++使用するたびに)。そうすると、同じ ID を持つ 2 つの要素を取得する機会がなくなります。

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

于 2012-04-04T23:27:27.723 に答える
0

onClickOK ボタンの属性を削除してみてください。

于 2012-04-04T23:27:12.417 に答える