Javascript 访问jquery函数外部声明的变量
我在访问和更新document.ready函数中声明的变量时遇到了一些问题。每次我尝试在我的函数中执行警报时,都会更改这些函数的值。这是我的文件。带有变量和函数的ready函数。在此方面的任何帮助都将不胜感激Javascript 访问jquery函数外部声明的变量,javascript,jquery,Javascript,Jquery,我在访问和更新document.ready函数中声明的变量时遇到了一些问题。每次我尝试在我的函数中执行警报时,都会更改这些函数的值。这是我的文件。带有变量和函数的ready函数。在此方面的任何帮助都将不胜感激 /***********************************************************/ var bdv; var mv; var cYear; var _miles;
/***********************************************************/
var bdv;
var mv;
var cYear;
var _miles;
var cpo_input;
/* -------------------------------------------------*/
var _prestige;
var car_type;
var acc_history;
var _aam;
var avg_mileage;
/***********************************************************/
$(document).ready(function() {
/***********************************************************/
bdv = $("#base_dv").val();
mv = $('input:text[name="field8"]').val();
cYear = $('input:text[name="field2"]').val();
_miles = $('input:text[name="field5"]').val();
cpo_input = $('input:text[name="field19"]');
/* -------------------------------------------------*/
_prestige = 0.00;
car_type= 0;
acc_history = 0;
_aam = 0.00;
avg_mileage = 0.00;
/***********************************************************/
if ('<?php echo $job[0]['
job_type '] ?>' == "33") {
$('input:radio[name="field32"][value = val1]').attr("disabled", true);
$('input:radio[name="field32"][value = val2]').attr("disabled", true);
$("[name='field20[]']").each(function () {
$(this).change(function () {
$('input:radio[name="field7"]').each(function () {
if (!$('input:radio[name="field7"]').is(':checked')) {
alert("Please Select 2 or 4 door car");
$("[name='field20[]']").each(function () {
$(this).removeAttr('checked');
});
} else if ($('input:radio[name="field7"]').is(':checked')) {
return false;
}
});
$(this).click(function () {
bdv = damage_severity(mv, bdv);
_aam = average_annual_mileage_factor(_miles, mv);
avg_mileage = avg_mileage_calc(_miles, cYear);
alert("Market Value: " + mv);
alert("Miles Reporting: " + _miles);
alert("Base DV:" + bdv);
alert("Average Annual Mileage" + _aam);
alert("Average Mileage outside func: " + avg_mileage);
});
});
});
});
/*********************************************************************************/
var-bdv;
var-mv;
变种cYear;
var_miles;
变量cpo_输入;
/* -------------------------------------------------*/
var_prestige;
var车型;
var acc_历史;
var_aam;
var平均里程;
/***********************************************************/
$(文档).ready(函数(){
/***********************************************************/
bdv=$(“#base#u dv”).val();
mv=$('input:text[name=“field8”]”)。val();
cYear=$('input:text[name=“field2”]”)。val();
_英里=$('input:text[name=“field5”]')。val();
cpo_输入=$('input:text[name=“field19”]”);
/* -------------------------------------------------*/
_声望=0.00;
车辆类型=0;
acc_历史=0;
_aam=0.00;
平均里程=0.00;
/***********************************************************/
如果(“”=“33”){
$('input:radio[name=“field32”][value=val1]').attr(“disabled”,true);
$('input:radio[name=“field32”][value=val2]').attr(“disabled”,true);
$(“[name='field20[]']”)。每个(函数(){
$(此).change(函数(){
$('input:radio[name=“field7”]”)。每个(函数(){
如果(!$('input:radio[name=“field7”]”)是(':checked')){
警报(“请选择2门或4门轿厢”);
$(“[name='field20[]']”)。每个(函数(){
$(this.removeAttr('checked');
});
}else if($('input:radio[name=“field7”]”)是(':checked')){
返回false;
}
});
$(此)。单击(函数(){
bdv=损伤程度(mv,bdv);
_aam=平均年里程系数(_英里,mv);
平均里程=平均里程计算(_英里,cYear);
警报(“市值:+mv”);
警报(“英里报告:”+英里);
警报(“基本DV:+bdv”);
警报(“平均年里程”+aam);
警报(“功能范围外的平均里程:+平均里程”);
});
});
});
});
在.ready()
之外声明它们。在.ready()
内部填充它们
此外,您还有很多功能,这些功能一开始不需要在
.ready()
中。
,\u aam
和avg_miliety
似乎具有与文档触发时相同的值。ready
,因为您在使用这些值之前从不更新它们
我将声明移回$(document).ready()
,并执行如下操作:
$(document).ready(function () {
var bdv, aam = ...,
$bdv = $("#base_dv"),
$mv = $('input:text[name="field8"]'),
:
;
:
$(this).click(function () {
bdv = damage_severity($mv.val(), $bdv.val());
:
});
:
});
另外请注意,您必须将
$(this).click();
从$(this).change()移出
。现在,每次在元素上触发更改时,您的代码都会将一个新的click listener附加到该元素。变量只能在相同或更低的范围内访问。但是在这里,我没有看到任何问题。Wolff我不确定为什么我也会得到0,即使在.ready范围外声明了它们,并且在.ready作用域内初始化它们。Teemu很抱歉,我可能没有完全集中注意力。我的意思是我发出警报的值不正确。它们是原始声明的值。关于返回false,我不确定在满足条件后是否有更好的方法退出循环。Teemu-我对大多数情况都不太了解,您的建议是什么ice是否希望提高效率?嗯……请忘记jQuery中的返回问题。但是每次更改内容时附加一个新的单击处理程序可能不是您想要的。在damage\u severity()
和其他函数声明中的参数如何命名?如果您有相同的名称(\u miles
,mv
),原始外部值隐藏在该函数中。OP的代码中有什么问题,我看不出来。好的,我明白了,OP发布的代码是有效的,而不是无效的代码。我这样做了,现在它没有提示值,我不确定为什么使用bdv=损坏严重程度($mv.val(),$bdv.val());实际上返回了一个错误,表示$mv.val()不是函数。您确定您已为它们分配了实际的jQuery对象,而不是.val()
?请重新查看我的代码中的变量声明。