从jQuery中的嵌套函数访问$ this?

时间:2014-06-05 05:45:04

标签: jquery

我有一个点击处理函数,其中嵌套了另一个输入处理函数。我需要在内部函数的末尾访问(this)data-filter属性的值。但是数据过滤器属于外部函数类。我想从内部函数访问和操作它。即使这些函数之间的所有变量都相互开放,如果可能的话。

// click handler to check if a set of links are clicked
$optionLinks.click(function () { 

    // click handler to continually check for keyboard input   
    jQuery('input').bind('input propertychange', function() {
        jQuery('#output').html(jQuery(this).val());

        // grab user input, put in a variable
        var txtinput = jQuery('#output').html();

        // check if user input matches any tags     
        if (jQuery.inArray(content, tags) >= 0) {

            // if it does overwrite the data-filter attribute
            jQuery('#gallery_filter').attr('data-filter', txtinput);

            // set this variable which is used by the outer function
            var selector_<?php echo $unique_id;?> = jQuery(this).attr("data-filter"); 

        }   
    });

    //do other stuff

});

2 个答案:

答案 0 :(得分:2)

您可以将外部元素保存到变量中:

jQuery('input').bind('input propertychange', function() {
  var that = this;

并在其他函数中使用它:

jQuery(that).attr("data-filter");

答案 1 :(得分:0)

以下是处理此问题的两种常见模式:

之一:

function outerFunction() {
   var outerThis = this; // Now we can access outerFunction via outherThis \o/
   (function innerFunction() {
      doSomethingWith(outerThis);
      outerThis === this; // False
   })();
}

2:

function outerFunction() {
    var outerThis = this;
    (function innerFunction() {
        doSomethingWith(this);
        outerThis === this; // True
    }).bind(this)(); 
}