【问题标题】:how to use a variable passed as a function argument如何使用作为函数参数传递的变量
【发布时间】:2011-12-10 01:50:57
【问题描述】:

更新

我有一个小错字,一切正常。

我不知道如何在多个 ajax 调用中使用作为函数参数传递的变量作为选择器。

First 和 Second 都可以,但是在调用 ThirdCallbackFunction 时单击“#button-”+ id_number 不会触发任何内容,尽管 alert("#button-" + id_number) 显示正确的元素 #button-0 #button-1 ...等

$(document).ready(function() {
        // FIRST
    $("#process").click(function(){
        var somedata = $("#somedata").val();
          $('input[type="text"]').removeClass("error");
          $.ajax({
              url: 'first.php',
              type: "POST",
              data: ({somedata: somedata }),
              beforeSend:function(){
                jQuery('#ajax-panel').html('<div class="loading"><img src="loading.gif" alt="Loading..." /></div>');
              },
              success: function(data){
                  $("#ajax-panel").html(data);
                      SecondCallbackFunction();
              },
              error:function(){
                jQuery('#ajax-panel').html('<p class="error">Oops!</p>');
              }
          }); 
        });
});
        // SECOND
        function SecondCallbackFunction(){
            $(".load-button").click(function(){
                    var id = $(this).closest('.box').attr('id');
                    var arr = id.split('-');
                    var id_number = arr[1];
                    alert(id_number);  //
                    $.ajax({
                        url: 'second.php',
                        type: "POST",
                        data: ({id_number: id_number }),
                        beforeSend:function(){
                          $("#"+id).find('.load-button').hide();    
                          $("#"+id).append('<div class="loading"><img src="loading.gif" alt="Loading..." /></div>');
                        },
                        success: function(data){
                            $("#"+id).find('.loading').hide();  
                            $("#"+id).append(data);
                            ThirdCallbackFunction(id_number);
                        },
                        error:function(){
                          $("#"+id).append('<p class="error">Oops!</p>');
                        }
                    });

            });
        }
        // THIRD
        function ThirdCallbackFunction(id_number){
            alert(id_number);  // SHOWING 1 , 2 ....etc
            $("#button-" + id_number).bind("click", function() {   // DOING nothing
                    var title = $('#title' + id_number).val();              
                    $.ajax({
                        url: 'third.php',
                        type: "POST",
                        data: ({title: title, 
                        }),
                        beforeSend:function(){
                           $("#item"+id_number).append('<div class="loading"><img src="loading.gif" alt="Loading..." /></div>');
                        },
                        success: function(data){
                             $("#item"+id_number).find('.loading').hide();  
                             $("#item"+id_number).append(data);
                        },
                        error:function(){
                          $("#"+id).append('<p class="error">Oops!</p>');
                        }
                    });
                });
        }

【问题讨论】:

  • 您的代码显然没有任何问题。请发布实际重现问题所需的 HTML 和 Javascript,并仅保留相关功能。
  • 控制台中有什么东西吗?当您在ThirdCallbackFunction 中对所需选择器执行console.log 时,它是否显示有任何匹配的DOM 元素?第三次点击处理程序中的console.log 是否出现?
  • 我有一个小错字,一切正常。

标签: javascript jquery jquery-selectors


【解决方案1】:

我不太明白你的问题,但如果你想使用任何变量、对象或任何可以定义为参数的东西,只需将其包装为数组[Variable](如果还没有,)获取这个变量将作为参数传递给函数,并使用apply函数。 func.apply(this, [Variable]);如果你恰好知道要传递的变量,直接正常传递即可:

(function() { })(variable1, variable2, /* ect... */);

或者使用调用函数:

func.call(this, variable1, variable2);

func 是您正在调用的函数。您还可以将关键字 this 替换为任何内容。如果这样做,函数内对this 的任何引用都将引用您提供的值。这就是 jQuery 等框架允许您通过在其框架内引用 this 来访问 jQuery 对象的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多