簡體   English   中英

函數未修改傳遞的參數值

[英]Function not modifying passed parameter value

我有以下功能:

function validateField(target, field, field_check) {
            if(target.val().trim().length > 0) {
                $.ajax({
                    url: '<?php echo $html->url('/fonykers/validate_',true); ?>'+ field + '/' + target.val(), 
                    dataType: 'json',
                    type: 'POST',
                    success: function(response) {
                        if(!response.ok) {
                            if(target.is('.ok')) {
                                target.removeClass('ok');
                            }
                            target.addClass('error');
                            error.html(response.msg);
                            error.fadeIn();
                            field_check = false;
                        } else {
                            if(target.is('.error')) {
                                target.removeClass('error');
                            }
                            target.addClass('ok');
                            alert('voy a asignar true');
                            field_check = true;
                        }
                    },
                        error:function (xhr, ajaxOptions, thrownError){
                            alert(xhr.statusText);
                            alert(thrownError);
                            field_check = false;
                        } 
                });        
            } else {
                error.html('You must specify a ' + field);
                error.fadeIn();
                target.addClass('error');
                field_check = false;
            } 

        }

我用它來驗證我的表單輸入字段,目標變量是字段本身,例如: $('#name_field')第二個變量是一個字符串,它為實例name指定字段name ,以了解它是什么PHP函數。會打電話。 最后一個布爾值,我用來知道該字段是否有效,例如我在腳本開頭定義的name_check並設置為false。

我的問題是, field_check在本地范圍中已正確更改,但它從未修改已傳入的外部變量,我在做什么錯呢?

這是因為變量沒有通過引用傳遞。 您既可以將其作為返回值,也可以使用類似的解決方法: http : //sirdarckcat.blogspot.com/2007/07/passing-reference-to-javascript.html

基本變量(int /布爾值等)通過值傳遞給函數-也就是說,當有人將其中一個傳遞給函數時,變量的值傳遞給函數,而不是變量本身。 實際上,您要修改的是一個完全不同的變量。

最簡單的解決方案是在完成字段驗證后返回true或false,並使用函數的返回值而不是檢查field_check

您還可以使用全局變量/屬性做幾件不同的事情。 例如...

var validator = function (target, field) {
  ...
  this.field_check = false;
}

validator(target, field);
if (validator.field_check) {
  ...
}

注意this.field_check的使用以及將函數分配給變量

在JavaScript中,簡單類型總是按值傳遞,而不是按引用傳遞。 換句話說,您正在傳遞布爾值的副本。 副本可以更改,但是原始副本永遠不會更改。

您的validate字段函數將需要返回新值,或者需要一個接收該值的回調函數。 您必須將新值顯式設置為原始變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM