单击jquery中的相应类,打开一个对话框窗体

时间:2011-07-01 06:17:21

标签: javascript jquery-ui jquery-selectors jquery-ui-dialog

我有这个jsfiddle http://jsfiddle.net/DgauY/1/ 在“内容”区域中删除元素时会添加两个项目。一个X元素删除被删除的元素和其他属性链接。我想要实现的是在单击相应的属性链接时打开不同的对话框形式,该链接具有基于其包含的元素的类。 就像我删除一个文本框,然后查看属性类,这是txtbox当我点击属性我应该有一个对话框形式,其中包含与文本框相关的选项,如标签等... 我希望我不要混淆......

1 个答案:

答案 0 :(得分:0)

很难弄清楚你在问什么。它听起来像,好像你正在询问如何通过打开不同的对话框来响应不同类别的不同“属性”链接上的点击。这将是微不足道的:只需使用bindclick),delegatelive将点击事件挂钩到相关的“属性”链接:

$("a.type1").click(function() {
    // Open the dialog for type1
    // ...

    // Prevent the default action of the link
    return false;
});
$("a.type2").click(function() {
    // Open the dialog for type2
    // ...

    // Prevent the default action of the link
});

(同样,你可以使用delegatelive,而不是在元素本身上绑定事件,如果这是动态的话。)

或者如果你想为处理程序中的所有类型和分支使用公共处理程序,你可以这样做:

$("a.type1, a.type2, a.type3").click(function() {
    // ...code all of them have in common...
    // ...

    // Branch on what class(es) the link has and open the relevant dialog
    // ...

    // ...more code all of them have in common...
    // ...

    // Prevent the default action of the link
    return false;
});

您可以使用多个类(因此每个链接都有“props”和“type1”或“type2”等)。

如果你的意思是链接不会实际上有不同的类型,但你想分支它们所在的同一个容器中的内容,你可以使用closest去直到您想要的容器,然后find和/或children找出容器中的内容:

$("a.props").click(function() {
    var container = $(this).closest('div'); // If the container is a div
    if (container.find("textarea")[0]) {
        // It has at least one text area, show dialog...
    }
    else if (container.find("input[type=text]")[0]) {
        // It has at least one text input, show dialog...
    }
    else if (container.find("input[type=button]")[0]) {
        // It has at least one `input`-style button, show dialog...
    }
    // else etc.

    // Prevent the default action of the link
    return false;
});