1

我们需要在页面加载时加载给定的函数。然后,我们应该重复执行该函数,每次单击给定按钮时。我们怎么能做到这一点?

这是代码:

$(function showMember() {

        $.ajax({ //Perform an asynchronous HTTP (Ajax) request.

            success: function(html){
                $('#members').append(html);
            },

            type: 'get',
            url: '<?php echo $this->createUrl('member'); ?>', //A string containing the URL to which the request is sent.
            data: {index:$('#members div>h3').size()},
            cache: false, //if false, it will force requested pages not to be cached by the browser.
            dataType: 'html' //The type of data that you're expecting back from the server.
        });
    });

$('.addMember').click(showMember);

showMember点击后不会触发。

谁能详细解释一下,这是为什么呢?

4

7 回答 7

4

那是因为您创建的功能在有限的范围内$(function ..)....您可以简单地做

  $(function(){ //document.ready function
    showMember();  //call showmember when document is ready
    $('.addMember').click(showMember); //call same function when clicked
  });

  function showMember() {

    $.ajax({ //Perform an asynchronous HTTP (Ajax) request.

        success: function(html){
            $('#members').append(html);
        },

        type: 'get',
        url: '<?php echo $this->createUrl('member'); ?>', //A string containing the URL to which the request is sent.
        data: {index:$('#members div>h3').size()},
        cache: false, //if false, it will force requested pages not to be cached by the browser.
        dataType: 'html' //The type of data that you're expecting back from the server.
    });
}
于 2013-04-26T10:12:55.953 回答
2

作为 bipen 答案的附录:您的代码不起作用的原因是因为您似乎没有得到什么$

由于您已经使用 jQuery 标记了您的问题,因此我假设您正在使用它。当您在代码中包含 jQuery 库时,它会为您提供一个名为jQuery. 此函数别名为$。即,$与 相同jQuery

当您在 javascript 中调用函数时,您可以传入参数:

parseInt('1234');

在代码的顶部,您正在调用$,并将函数定义作为参数传递。所以

$(function showMember()...

是相同的

jQuery(function showMember()...

这在语法上是正确的,但将函数的范围限制为您传递给$函数的参数列表。一旦该调用完成,该函数showMember将不再存在。

这就是您的代码不起作用的原因。

于 2013-04-26T10:33:43.333 回答
1

这里有几点:-

  • 你不需要这样打电话$(function showMember()
  • 你需要function showMember()简单地调用它。
  • 此外,您需要click在 DOM 就绪方法中调用该函数。
  • 只是为了确保在 DOM 完全加载时触发 click 事件,如下所示:

$(document).ready(function () {
    $('.addMember').click(showMember);
});

或者

$(function () {
    $('.addMember').click(showMember);
}); 
于 2013-04-26T10:15:45.510 回答
1

当您function事件处理程序中传递自定义(即单击、更改等)时,您需要像往常一样创建函数,您不需要包含function$();

并且不要忘记将代码包装在里面$(document).ready();

function showMember()
{
    $.ajax(
    {
        success: function(html)
        {
            $('#members').append(html);
        },
        type: 'get',
        url: '<?php echo $this->createUrl('member'); ?>',
        data: {index:$('#members div>h3').size()},
        cache: false,
        dataType: 'html'
    });
}

$(document).ready(function(){
    $('.addMember').click(showMember);
});
于 2013-04-26T10:12:50.857 回答
0

你可能有这个 lement 动态绑定,所以我认为你需要在所有绑定完成后绑定它:

$('.addMember').live('click', function(){
   showMember(); return false;
});
于 2013-05-08T15:42:14.300 回答
0

尝试这个:

$('.addMember').click(function(){
  showMember();
});

function showMember(){
 $.ajax({ //Perform an asynchronous HTTP (Ajax) request.
            success: function(html){
                $('#members').append(html);
            },
            type: 'get',
            url: '<?php echo $this->createUrl('member'); ?>', //A string containing the URL to which the request is sent.
            data: {index:$('#members div>h3').size()},
            cache: false, //if false, it will force requested pages not to be cached by the browser.
            dataType: 'html' //The type of data that you're expecting back from the server.
        });
}
于 2013-04-26T10:13:51.690 回答
0

使用 jQuery 时需要使用 ready 函数

$(document).ready(function(){
   $('.addMember').click({});
});
于 2013-04-26T10:12:36.670 回答