2013-12-18 52 views
0

我对jQuery/Javascript有一个相当奇怪的问题。 (这发生在IE,FF和铬)点击功能生成的jQuery对话框中的元素

我有一个(asp.net)网页如下:有很多按钮

报头(在的PreRender生成)

隐藏DIV与按钮做回发(生成的OnLoad)&一个div来作为对话


页使用带有一个iFrame

可以说我有一个按钮'1234_stuff'作为它的CLIENTID在Hidden div中。 我有一个按钮在头上有一个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 
    }); 
} 

当我点击“PopupStarter”按钮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

你的问题是什么? – simbabque

+0

那么,使用setTimeout()的作品。但其中之一是解决问题的一种肮脏的方式。问题变成:如何直接用javascript点击按钮(而不是使用定时事件来实现)。 –

回答

0

尝试使用这样的:

$(document).on('click', '#' + buttonid, function(){ 
    Your functions here; 
}); 

不上的页面加载存在任何项目,都需要有事件监听器适用于在DOM存在的文档,身体,或任何父选择页面加载。 Javascript不会将侦听器附加到DOM加载时不存在的对象。希望这可以帮助!

+0

非常真实,这就是为什么在PreRender上生成的标题按钮和jQuery对话框中的按钮都在隐藏div的按钮上“点击”(这些都是生成的OnLoad)。 而SetTimeout事件只是执行完全相同的动作,但100ms后,这确实奏效。这让我总结了这个问题,不要用他们自己的按钮,但它在哪里让我想知道。 –

+0

如果我误解了我的道歉。祝你好运 :) – wrxsti