【问题标题】:jquery plugin: How can i run my function so that "this" refers to the element the plugin was called from?jquery 插件:如何运行我的函数以使“this”指代调用插件的元素?
【发布时间】:2011-05-27 03:16:20
【问题描述】:

我希望这是一个相当基本的问题。在下面的 javascript 中,我想运行 checkval() 函数,就好像它是在“this”(在 checkval 内)指的是插件被调用的元素(嗯,元素之一)的范围内执行的)。

所以如果我打电话

$('.has_hidden').conditional(); 

然后将对所有这些项目运行 checkval 并将其绑定到 on change 事件。

原因是,我有一个表单,如果您输入一些内容,它将取消隐藏更多选项,例如,如果您输入“australia”,它将取消隐藏一堆其他元素。现在,当我保存并重新加载该表单时,我的 php 脚本会重新填充数据,但其他元素仍然隐藏。我只需要运行 check val 以便它们不被隐藏。明白马

/**
 * This class will show or hide a bunch of elements (A,B,C) based on the value in element (E, this).
 * To use it, take the name of the form element (E, this) and apply it as a class to A,B,C
 * Then add a display none to A,B,C (add class off)
 * Set the "rel" tag on 
 * Finally, run $(E).conditional();
 */
(function( $ ){
    $.fn.conditional = function() {
    return this.each(function(){
        var $this = $(this);
        $this.unbind('change.cns').bind('change.cns', checkval);
    });
    function checkval(){
        var regex = $(this).attr('rel');
        var class_name =$(this).attr('name');
        if($(this).val().search(regex)>-1) 
        $('.'+class_name).show();
        else
        $('.'+class_name).hide();
    }   
    };
})( jQuery );

【问题讨论】:

    标签: jquery jquery-plugins scope


    【解决方案1】:

    我认为你可以在这种情况下使用jquery代理来解决这个问题:

    $this.unbind('change.cns').bind('change.cns', checkval);
    

    $this.unbind('change.cns').bind('change.cns', $.proxy( checkval, $this ));
    

    【讨论】:

      【解决方案2】:

      对不起,我没有正确解释我的问题,但我真正想要的是

      $this.trigger('change.cns');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        • 2014-09-01
        • 2011-10-10
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        相关资源
        最近更新 更多