【问题标题】:JQuery reusable dialog with different content具有不同内容的 JQuery 可重用对话框
【发布时间】:2011-08-15 14:05:14
【问题描述】:

我是 JQuery 新手,无法创建可重用的对话框。这是我的代码

    $(function () {
    $("#baseDialog").dialog({
        autoOpen: false,
        modal: true,
        width: 520,
        show: "blind",
        hide: "explode"
    });
    $("#baseDialogOpener").click(function () {
        $("#baseDialog").dialog("open");
        return false;
    });

我是这样使用这个对话框的:

<input id="baseDialogOpener" type="button" value="Update" />
    <div id="baseDialog" title="Test Dialog" class="divClass">
    <!-- here goes some ASP .NET MVC 2 code -->
    </div>

问题是我想在许多页面中多次重用此对话框,但使用不同的 html 内容,我不知道该怎么做,因为我也需要使用样式,所以我不能使用 class 属性.我不能在同一页面上使用具有相同值的 id 属性。 我没有办法像这样使用它吗?可能具有除 id 之外的其他属性(类为 css 保留)?
<input id="baseDialogOpener" type="button" value="Update" />
<div id="baseDialog" title="Test Dialog" class="divClass">
<form>...</form>
</div>
<input id="baseDialogOpener" type="button" value="Update 2" />
<div id="baseDialog" title="Test Dialog 2" class="divClass">
<form>...</form>
</div>

期待您的回答。
更新:我使用类属性执行了上面的代码,但是当我单击按钮时,所有对话框都会立即出现。有什么办法解决这个问题?

【问题讨论】:

    标签: javascript jquery user-interface dialog modal-dialog


    【解决方案1】:

    对话框在打开时可以从服务器加载 .htm 文件中的内容。

    你可以使用这样的东西:

    $("#baseDialogOpener").click(function () {
        $("#baseDialog").load('content.htm');
        return false;
    });
    

    更新:这段代码展示了如何让相同的 .click() 根据按钮显示不同的内容。

    $("dialogButton.").click(function () {
        $("#baseDialog").load($(this).data('content'));
        return false;
    });
    
    
    <input type="button" value="first" id="button1" class="dialogButton" data-content="content1.htm" />
    <input type="button" value="second" id="button2" class="dialogButton" data-content="content2.htm" />
    

    【讨论】:

    • 而且我不能这样使用它吗? &lt;input id="baseDialogOpener" type="button" value="Update" /&gt; &lt;div id="baseDialog" title="Test Dialog" class="divClass"&gt; &lt;form&gt;...&lt;/form&gt; &lt;/div&gt;&lt;input id="baseDialogOpener" type="button" value="Update 2" /&gt; &lt;div id="baseDialog" title="Test Dialog 2" class="divClass"&gt; &lt;form&gt;...&lt;/form&gt; &lt;/div&gt;
    • 如果有多个对话框,当#baseDialogOpener被点击时,它们都会打开content.htm
    • 所以我能避免这种情况的唯一方法就是给他们不同的名字?
    • 我会假设不同的按钮会打开不同的内容,因此 .load() 将包含每个单独按钮所需的文件。
    • @kernel_mode: valid html 表示只有一个元素可以有 id,因此您的上述评论无效。 jquery 在这种情况下只返回第一个元素。如果你需要的话,我会用不同的按钮打开不同的文件来更新我的答案......
    【解决方案2】:

    您可以使用多个class 代替您的id

    例如,而不是:

    &lt;div id="baseDialog" title="Test Dialog" class="divClass"&gt;

    使用

    &lt;div title="Test Dialog" class="divClass baseDialog"&gt;

    然后你可以在你的javascript中引用它:

    你在哪里

    $("#baseDialogOpener").click(function () {
            $("#baseDialog").dialog("open");
            return false;
        });
    

    试试

    $(".baseDialogOpener").click(function () {
            $(this).children(".baseDialog").dialog("open");
            return false;
        });
    

    $(this) 只抓取点击的内容,因此您可以拥有多个相同类型的类。

    【讨论】:

    • 是的,我知道,但是类是为 css 保留的。
    • javascript (jQuery) 使用 class 和 id - 它根本不是为 css “保留”的。除非你说 #baseDialogOpener 是一个已经使用过的类,否则我强烈建议使用不同的命名约定。
    • “保留”是指我可以使用此属性来应用样式。
    • 对 - 你也必须在你的 CSS 中改变它。在您的 .css 文件中,将 #baseDialogOpener 重命名为 .baseDialogOpener,它会做同样的事情。
    • 哦,我忘了我可以这样做:class="class1 class2 class3"。
    猜你喜欢
    • 1970-01-01
    • 2013-09-07
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多