为什么在.click上没有触发此功能?

时间:2013-04-26 10:10:48

标签: javascript jquery

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

以下是代码:

$(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不会触发uppon点击。

任何人都可以详细解释,为什么会这样?

7 个答案:

答案 0 :(得分: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.
    });
}

答案 1 :(得分:2)

作为bipen答案的附录:你的代码不起作用的原因是你似乎没有得到$的内容。

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

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

parseInt('1234');

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

$(function showMember()...

相同
jQuery(function showMember()...

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

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

答案 2 :(得分:1)

当你在事件处理程序中传递自定义function(即点击,更改等)时,你需要正常创建函数,你不需要在function内包裹$(); {1}}

并且不要忘记将代码包装在$(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);
});

答案 3 :(得分:1)

以下几点: -

  • 您无需像这样致电$(function showMember()
  • 您需要简单地将其称为function showMember()
  • 此外,您需要在DOM ready方法中调用click函数。
  • 只是为了确保在DOM完全加载时触发click事件,如下所示:

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

OR

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

答案 4 :(得分:0)

使用jQuery时需要使用ready函数

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

答案 5 :(得分: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.
        });
}

答案 6 :(得分:0)

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

$('.addMember').live('click', function(){
   showMember(); return false;
});