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会产生一个像 38518.060150090605 这样的数字,当你'#general-alert-'在 jQuery 调用中连接时会产生一个像这样的选择器:

#general-alert-38518.060150090605

这将被视为查找具有 idgeneral-alert-38518和 class的元素的选择器060150090605,因为类名位于点之后。

要生成随机数,请改用,比如说Math.floor(Math.random()*5000)

更好的选择是使用递增的全局变量(例如,_global_counter++每次使用它时),那么您将没有机会获得具有相同 id 的两个元素。

更好的解决方案是在 JavaScript 中创建实际的 DOM 元素,将事件附加到这些元素,然后将这些元素插入到文档中的正确位置。这样他们就根本不需要ID。

于 2012-04-04T23:27:27.723 回答
0

尝试删除onClickOK 按钮的属性。

于 2012-04-04T23:27:12.417 回答