您好我来自一个非常强大的OO背景,我正在尝试将我的知识应用于javascript,许多人将其视为OO语言。
所以我要做的是创建一个具有一些静态属性值的对象,以及一些在用户更改选择框的值时动态更改的对象。这工作正常,但只有一次,我不知道为什么。在他们第一次更改我得到的选择框的值
之后swapDetails.newDriver1不是函数
这是我的代码
$(document).ready(function(){
var swapDetails = {
oldDriver1:"<?php echo $swapDetails[2];?>",
oldDriver2:"<?php echo $swapDetails[3];?>",
missionRef:"<?php echo $swapDetails[1];?>",
date:"<?php echo $swapDetails[0];?>",
newDriver1:function(){
this.newDriver1 = $('#swapDriver1').val();
},
newDriver2:function(){
this.newDriver2 = $('#swapDriver2').val();
}
};
$('#makeDriverSwap').click(function(){
console.log(swapDetails);
});
$('#swapDriver1').change(function(){ swapDetails.newDriver1();});
$('#swapDriver2').change(function(){ swapDetails.newDriver2();});
});
答案 0 :(得分:0)
感谢你们指导我到正确方向的所有通信,这里的问题确实是我在javascript中编码,好像它是基于类的。所以我的解决方案是制作setter方法。以下是关注未来的任何人的更新代码:
$(document).ready(function(){
var swapDetails = {
oldDriver1:"<?php echo $swapDetails[2];?>",
oldDriver2:"<?php echo $swapDetails[3];?>",
missionRef:"<?php echo $swapDetails[1];?>",
date:"<?php echo $swapDetails[0];?>",
newDriver1:"",
newDriver2:"",
//make object setter methods
set newDriver1(driver){
this.newDriver1 = driver;
},
set newDriver2(driver){
this.newDriver2 = driver;
}
};
$('#makeDriverSwap').click(function(){
console.log(swapDetails);
});
$('#swapDriver1').change(function(){ swapDetails.mewDriver1 = $(this).val()}); //call setter method});
$('#swapDriver2').change(function(){ swapDetails.mewDriver2 = $(this).val()}); //call setter method});
});
再次感谢你指出我正确的方向。
答案 1 :(得分:-1)
newDriver1:function(){
this.newDriver1 = $('#swapDriver1').val();
},
问题似乎是您使用上面的代码定义newDriver1作为函数。在该函数内部,您将newDriver1函数重写为字符串值。因此,下次调用此代码时:
$('#swapDriver1').change(function(){ swapDetails.newDriver1();});
swapDetails.newDriver1();
有一个值,并且不是一个函数,因为它已被输入字段的值覆盖。
我建议引入一个不同的字段来存储输入值。