我对jQuery / Javascript有一个相当奇怪的问题。 (这种情况发生在IE,FF和Chrome中)
我有一个(asp.net)网页如下:
包含大量按钮的标题(在PreRender中生成)
带有按钮的隐藏div做回发(生成OnLoad)&用作对话框的div
使用iFrame的页面
假设我在隐藏div中有一个带有'1234_stuff'
的Button作为其CLIENTID。
我在标题中有一个按钮OnClientClick = "$('#1234_stuff').click();return false;";
当我点击标题中的按钮时,这非常有效。好。
我在标题中有另一个按钮(让我们称之为PopupStarter),其中包含OnClientClick = "Popup('Titel', 'Description', '1234_stuff');return false;";
javascript弹出功能如下:
function Popup(title, description, buttonid) {
$('#dialog-popupText').html('<p><b>' + title + '</b></p><p>' + description + '</p>');
var buttonsToShow;
if (buttonid!= null) {
buttonsToShow = {
'ClickMe': function () {
$('#' + buttonid).click();
$(this).dialog('close');
},
'Cancel': function () {
$(this).dialog('close');
}
}
} else {
buttonsToShow = {
'Cancel': function () {
$(this).dialog('close');
}
}
}
$('#dialog-popup').dialog(
{
resizeable: false,
width: 'auto',
modal: true,
draggable: false,
buttons: buttonsToShow
});
}
当我点击&#39; PopupStarter&#39;按钮jQuery对话框按预期显示,没有麻烦。但是......当我点击ClickMe按钮时没有任何反应(除了关闭对话框)。
我认为我做错了:所以我用计时器试了一下:
function Popup(title, description, buttonid) {
$('#dialog-popupText').html('<p><b>' + title + '</b></p><p>' + description + '</p>');
var buttonsToShow;
if (buttonid!= null) {
buttonsToShow = {
'ClickMe': function () {
setTimeout(""$('#"" + buttonid + ""').click();"", 100);
$(this).dialog('close');
},
'Cancel': function () {
$(this).dialog('close');
}
}
} else {
buttonsToShow = {
'Cancel': function () {
$(this).dialog('close');
}
}
}
$('#dialog-popup').dialog(
{
resizeable: false,
width: 'auto',
modal: true,
draggable: false,
buttons: buttonsToShow
});
}
这个有效!!现在这很奇怪。所以我打电话给父jQuery
parent.$('#' + buttonid).click();
这也行不通。
最重要的是,当我在浏览器的控制台中手动输入每一行时,它们都能正常工作!
答案 0 :(得分:0)
尝试使用:
$(document).on('click', '#' + buttonid, function(){
Your functions here;
});
页面加载时不存在的任何项目都需要将事件侦听器应用于页面加载时DOM中存在的文档,正文或任何父选择器。 Javascript不会将侦听器附加到加载DOM时不存在的对象。希望这有帮助!