Плагин jquery: Как я могу запустить свою функцию, чтобы «this» ссылался на элемент, из которого был вызван плагин? - PullRequest
1 голос
/ 27 мая 2011

Довольно простой вопрос, на который я надеюсь.В следующем javascript я хочу запустить функцию checkval (), как если бы она была выполнена, в рамках которой «this» (в пределах checkval) ссылается на элемент, к которому вызывается плагин (ну, один из элементов).

Так что, если бы я позвонил

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

, тогда он запустил бы проверку всех этих элементов, а также привязал бы ее к событию при изменении.

ПричинаУ меня есть форма, которая будет показывать дополнительные параметры, если вы наберете что-то, скажем, если вы наберете «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 );

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Я думаю, что в этом случае вы можете использовать прокси-сервер jquery для решения этой проблемы:

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

To

$this.unbind('change.cns').bind('change.cns', $.proxy( checkval, $this ));
0 голосов
/ 31 мая 2011

Извините, я не объяснил свой вопрос должным образом, но на самом деле я искал

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