Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jQuery中选择一个元素并执行匿名函数,而不将其绑定到事件?_Jquery_Jquery Ui - Fatal编程技术网

如何在jQuery中选择一个元素并执行匿名函数,而不将其绑定到事件?

如何在jQuery中选择一个元素并执行匿名函数,而不将其绑定到事件?,jquery,jquery-ui,Jquery,Jquery Ui,假设我有一个有两个锚的div: <div id="#dialog"> <a href="#" class="ok">Delete</a> <a href="#" class="cancel">Cancel</a> </div> 我希望能够将其合并为以下内容: $('#dialog').execute(function() { var dialog = $(this); dialog.fin

假设我有一个有两个锚的div:

<div id="#dialog">
    <a href="#" class="ok">Delete</a>
    <a href="#" class="cancel">Cancel</a>
</div>
我希望能够将其合并为以下内容:

$('#dialog').execute(function() {
    var dialog = $(this);

    dialog.find('a.ok').click(function() {
        $.ajax({ ... });
        dialog.dialog('close');
    });

    dialog.find('a.cancel').click(function() {
        dialog.dialog('close');
    });
});
execute()
函数将立即执行匿名函数,而不会将其绑定到DOM事件。我希望使用此模式将相关函数分组在一起(在本例中,对话框中有两个相互关系非常密切的按钮)

我的问题有两个:

  • 我应该在这里使用的实际jQuery调用是什么
  • 这是将相关函数分组的最佳方式吗

  • 您不需要任何特殊的jQuery内容,只需编写一个函数并将其作为参数提供给
    $(“#dialog”)

    function do_stuff(dialog) {
        dialog.find('a.ok').click(function() {
            $.ajax({ ... });
            dialog.dialog('close');
        });
    
        dialog.find('a.cancel').click(function() {
            dialog.dialog('close');
        });
    }
    
    do_stuff($('#dialog'));
    
    或者,如果您真的喜欢匿名函数,您可以使用:

    但是将每个与只能匹配单个元素的选择器一起使用看起来很有趣。您还可以定义自己的自执行函数:

    (function(dialog) {
        dialog.find('a.ok').click(function() {
            $.ajax({ ... });
            dialog.dialog('close');
        });
    
        dialog.find('a.cancel').click(function() {
            dialog.dialog('close');
        });
    })($('#dialog'));
    

    这里没有最好的,你使用适合你的特殊情况和当地习俗的东西。

    问得好!我不知道这是否是最好的方法,但是
    .each(function(){…})
    应该可以工作。
    $('#dialog').each(function() {
        var dialog = $(this);
    
        dialog.find('a.ok').click(function() {
            $.ajax({ ... });
            dialog.dialog('close');
        });
    
        dialog.find('a.cancel').click(function() {
            dialog.dialog('close');
        });
    });
    
    (function(dialog) {
        dialog.find('a.ok').click(function() {
            $.ajax({ ... });
            dialog.dialog('close');
        });
    
        dialog.find('a.cancel').click(function() {
            dialog.dialog('close');
        });
    })($('#dialog'));