Javascript 组合多个jQuery函数

Javascript 组合多个jQuery函数,javascript,jquery,jquery-ui,dialog,Javascript,Jquery,Jquery Ui,Dialog,有没有办法将所有这些结合起来以减少js的数量?这只是我网站上jquery对话框的一个例子,还有一些。谢谢 //initiate Search refinement dialog here $("#chooseMoreCnt, #chooseMoreCat, #chooseMorePr").dialog({ bgiframe: true, autoOpen: false, width: 500, modal: true, open: function(typ

有没有办法将所有这些结合起来以减少js的数量?这只是我网站上jquery对话框的一个例子,还有一些。谢谢

//initiate Search refinement dialog here
$("#chooseMoreCnt, #chooseMoreCat, #chooseMorePr").dialog({
    bgiframe: true,
    autoOpen: false,
    width: 500,
    modal: true,
    open: function(type, data) {
        $(this).parent().appendTo(jQuery("form:first"));
    }
});

//trigger country dialog
$('a.chooseMoreCnt').click(function() {
    $('#chooseMoreCnt').dialog('open');
    return false;
});

//trigger category dialog
$('a.chooseMoreCat').click(function() {
    $('#chooseMoreCat').dialog('open');
    return false;
});

//trigger price dialog
$('a.chooseMorePr').click(function() {
    $('#chooseMorePr').dialog('open');
    return false;
});

如果您的链接指向对话框元素的ID,并且向每个元素添加了一个选择的元类,则可以将最后三个调用组合到:

$('a.choose').click(function() {
    $(this.hash).dialog('open');
    return false;
});
其中一个链接的HTML在语义上是最正确的,甚至可以与禁用的JS一起使用,假设对话框在那里,那么:

<a href="#chooseMoreCat" class="choose">Choose more categories</a>
是的,它意味着更改标记,但它也为您提供了更改标记的自由

以后添加任意数量的对话框

在以后的任何对话框中添加任意数量的开场白

使用最少的CSS统一设置所有对话框和指向对话框的链接的样式

不再接触Javascript

如果对话框的启动方式与注释中所述的不同,那么您可以使用CuSS的$进行此部分。每种方法都可以从别处定义的对象中读取函数内的适当宽度:

var dialog_widths = {'chooseMoreCat': 400, 'chooseMorePr': 300, /*...*/ };

嗯,这有点复杂。 你有3个以上的对话吗?如果是,您可以这样做:

var dialogs=["chooseMorePr","chooseMoreCat","chooseMoreCnt"];
$.each(dialogs,function(i,v){
    $('a.'+v).click(function(){$('#'+v).dialog('open');});
});

为了优化性能,在连接到多个图元时应使用live。下面是我解决这个问题的方法。解决方案是动态添加任意多的对话,而且速度非常快

请记住将AnyParentOfLink更改为ParentDiv,或者在最坏的情况下删除它,jQuery将使用document

var dialogues = ['#chooseMoreCnt', '#chooseMoreCat', '#chooseMorePr'];

$(dialogues.toString()).dialog({
    // ...
});

$('a', '#anyParentOfTheLinks').live('click', function(){
    // Cache for performance
    var $this = $(this), len = dialogues.length;

    for(var i = 0; i < len; i++)
        if($this.is('.' + dialogues[i].substr(1))) {
            $this.dialog('open');
            break;
        }

    return false;
});

这就是我的建议。为所有div指定一个常规对话框content say类,并使用以下命令初始化它们:

$(".dialogContent").dialog({
    bgiframe: true,
    autoOpen: false,
    width: 500,
    modal: true,
    open: function(type, data) {
        $(this).parent().appendTo(jQuery("form:first"));
    }
});
当然,使用Boldewyn的点击事件解决方案,如果事情是动态生成的,最好使用LiveIMHO。通过这种方式,您可以使用更少的代码处理所有初始化和单击事件


HTH

散列的作用是什么?但这样他就不得不修改html结构,你知道他是否只有3个或更多吗?我想知道。什么是散列?请同时说明对话的初始化。我不介意修改html结构,如果这意味着压缩js文件。我有三个以上的对话框要加载,但它们的启动方式不同。i、 e宽度、高度等。。“添加一个元类”是什么意思?你的意思是在所有触发日志的链接中添加一个css类choose吗?顺便说一下,谢谢你回复我@马克:没错,添加一个类属性。我用一个示例标记更新了答案。为什么?我从来没有说它是最短的,我说它是最好的。我没有标记为-1,我读了一个问题:有没有办法将所有这些结合起来以减少JS的数量?@诅咒:如果你没有标记为-1,为什么你在评论中这么说?因为我不能标记,而他标记为,只是因为我不喜欢他的code@CuSS当前位置是的,我读过这个问题。我的代码金额相对于原件减少了,是吗?除了其他用户的有效但缓慢的回答之外,我还想提供一个性能优化的版本。提问者可能需要,也可能不需要,但它就在这里。更短更快。我不明白为什么这应该得到-1。如果在编写通用解决方案时必须考虑3个以上的对话,那么在每个元素上添加事件处理程序将非常消耗性能。此外,使用$.each比for循环慢。$。如果指定数组而不是标识符,则每个循环的行为都类似于for循环!请在jQuery文档中阅读!$.each函数与.each函数不同,后者用于以独占方式迭代jQuery对象。$。每个函数都可以用于迭代任何集合,无论它是map JavaScript对象还是数组。对于数组,每次都会向回调传递一个数组索引和相应的数组值。也可以通过this关键字访问该值。这只是执行for的一种方式,但是使用jQuery方式。这里的主要性能问题是事件处理程序,这比每个问题$更重要。但是,是的,正如我所说,a$。每个都比for循环慢。我完全知道他们是干什么的,但我不明白你为什么要向我解释。只需使用for循环,在jQuery数组上迭代一个jQuery集就是一个项目数组。
$(".dialogContent").dialog({
    bgiframe: true,
    autoOpen: false,
    width: 500,
    modal: true,
    open: function(type, data) {
        $(this).parent().appendTo(jQuery("form:first"));
    }
});