[英]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.