如何对内部函数中的变量进行任何更改以影响主变量值

时间:2012-03-06 16:12:06

标签: javascript jquery jquery-plugins

我知道java脚本没有引用调用。那我怎么解决这个问题呢?

(function($){

$.fn.extend({

    something: function(options) {
        var Status;
        var defaults = {
            regex:/^([\u0600-\u06FF]|\s)*$/,
            errortxt:"Invalid input",
            emptytxt:"It should not be empty"
        }
        var options =  $.extend(defaults, options);
        $(this).bind('change', function () { 
            Status = true;
             $(this).each(function() {
                /*variables*/
                var necessaryElement;
                if (options.regex && options.errortxt && options.errorsection)
                {
                    var filter = options.regex;
                    var $this = $(this);
                    var wrongMessage = options.errortxt;
                    var $errordiv = $("[ID$="+options.errorsection+"]");
                } else{ 
                    console.log("Error : Not enough arguments for invoking something Plugin");
                }
                if (options.emptytxt)
                {
                    var noMessage = options.emptytxt;
                    necessaryElement = true;
                }
                else
                {
                    necessaryElement = false;
                }
                var elementvalue = $this.val();

                /* Methods */
                if (elementvalue != "" && necessaryElement) {
                    if (filter.test(elementvalue)){
                        $this.removeClass("error").addClass("ok");
                        $errordiv.fadeOut(300);
                    } else {
                        Status = false;
                        $this.removeClass("ok").addClass("error");
                        $errordiv.fadeIn(200);
                        $errordiv.text(wrongMessage);
                    }
                } else if (elementvalue == "" && necessaryElement) {
                    Status = false;
                    $this.removeClass("ok").addClass("error");
                    $errordiv.fadeIn(200);
                    $errordiv.text(noMessage);
                }
            });
        });
        return Status;
    }
});
})(jQuery);

我用这种方式在另一个js中调用它:

var myarray=new Array();
myarray[0] = $('#selector').something({
regex:/^([\u0600-\u06FF]|\s)*$/,
// another options
});
$('#selector').change(function (){
    alert (myarray[0]);
});

但它会提醒undefined

如果我将var Status更改为var Status= true,则会始终提醒true

任何人都可以帮助我吗?如何更改代码以返回所需的Status

1 个答案:

答案 0 :(得分:2)

编辑:想要更清楚。

Something()返回由change修改的值。 因此,当您致电something时,您将返回未修改的值。 然后你调用change来改变值,但它不会通过数组中的引用传递,所以它不会改变任何东西。

您可能希望使用JQuery对象上可用的data函数来保存数据。 这是一个简化版本:

(function($){
    $.fn.extend({

    something: function(options) {

        $(this).bind('change', function () {
            $(this).data('status','true');
        });
    }
});
})(jQuery);

$(document).ready(function() {
    var myarray=new Array();
    myarray[0] = $('#selector').something({
    regex:/^([\u0600-\u06FF]|\s)*$/
    });
    $('#selector').change(function (){
        alert ($(this).data('status'));
    });
});