【问题标题】:Clicking on element from jQuery dialog generated by function从函数生成的 jQuery 对话框中单击元素
【发布时间】:2013-12-18 23:22:21
【问题描述】:

我在使用 jQuery/Javascript 时遇到了一个相当奇怪的问题。 (这发生在 IE、FF 和 Chrome 中)

我有一个(asp.net)网页如下:

带有大量按钮的标题(在 PreRender 生成)

带有按钮的隐藏 div(生成 OnLoad)和用作对话框的 div


带有 iFrame 的页面

假设我在隐藏 div 中有一个带有 '1234_stuff' 作为其 CLIENTID 的按钮。 我在标题中有一个按钮,它有一个OnClientClick = "$('#1234_stuff').click();return false;";

当我单击标题中的按钮时,它可以完美运行。很好。

我在标题中有另一个按钮(我们称之为 PopupStarter),它有一个 OnClientClick = "Popup('Titel', 'Description', '1234_stuff');return false;";

javascript Popup 函数如下:

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();

这也行不通。

最重要的是,当我在浏览器的控制台中手动输入每一行时,它们都可以正常工作!

【问题讨论】:

  • 你的问题是什么?
  • 好吧,使用 setTimeout() 有效。但对于一个人来说,这是一种令人讨厌的解决问题的方式。问题就变成了:如何用javascript直接点击按钮(而不是使用定时事件来做到这一点)。

标签: javascript jquery asp.net click jquery-ui-dialog


【解决方案1】:

试试这个:

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

页面加载时不存在的任何项目都需要将事件侦听器应用于页面加载时 DOM 中存在的文档、正文或任何父选择器。 Javascript 不会将侦听器附加到加载 DOM 时不存在的对象。希望这会有所帮助!

【讨论】:

  • 非常正确,这就是为什么在 PreRender 上生成的标题中的按钮和 jQuery 对话框中的按钮都“单击”隐藏 div 中的按钮(它们都是在 OnLoad 上生成的) . SetTimeout 事件只是执行完全相同的操作,但在 100 毫秒之后,它确实有效。这让我得出结论,问题不在于它们自己的按钮,而是让我想知道它在哪里。
  • 如果我误解了,我深表歉意。祝你好运:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2022-01-20
  • 2011-01-13
相关资源
最近更新 更多