日期:2014-05-16  浏览次数:20324 次

为什么我得不到值
JScript code

var wanhua = {

    beishu : Number($("#beishu").val()),
    yuan : Number($("#yuan").html()),
    swanhua : $("input[name='wanhua']:checked").val(),

    init:function(){
        alert(this.swanhua );

    },



alert(this.swanhua );
我这样 出不来值undeerfind
但是 我这样 alert($("input[name='wanhua']:checked").val());
就可以出来值
这个是怎么一回事啊

------解决方案--------------------
swanhua : $("input[name='wanhua']:checked").val()?"on":"off",

------解决方案--------------------
可能是时序问题

也就是你 wanhua. swanhua的值在生成的时候 还没有内容 说不定页面上 这个input还不存在

所以你要这样
var wanhua = {

beishu : Number($("#beishu").val()),
yuan : Number($("#yuan").html()),
swanhua : function(){return $("input[name='wanhua']:checked").val()}
,
init:function(){
alert(this.swanhua() );

},
------解决方案--------------------
探讨

有值了,
但是我要的是他得到的值,而不是"no" "off"
引用:

swanhua : $("input[name='wanhua']:checked").val()?"on":"off",

------解决方案--------------------
wanhua.init();的调用在input后?
------解决方案--------------------
探讨
有值了,
但是我要的是他得到的值,而不是"no" "off"
引用:
swanhua : $("input[name='wanhua']:checked").val()?"on":"off",

------解决方案--------------------
真正原因应该是三楼说的时序问题,
因为init函数中直接alert($("input[name='wanhua']:checked").val());可以出来,说明获取值的方式是没有错的
而这种写法和alert(this.swanhua );看着一样,但分析下执行过程就知道是有区别的

alert(this.swanhua );弹出成员swanhua,而成员swanhua赋值的时间是对象wanhua构造的时候
也就是说这个写法$("input[name='wanhua']:checked").val()句执行的时间是wanhua构造的时候

alert($("input[name='wanhua']:checked").val());弹出时再获取值,那么这种写法$("input[name='wanhua']:checked").val()句执行的时间就是调用wanhua.init的时候

两中写法,唯一的区别就是获取值的时间了,所以,可以判断,wanhua构造时html没有赋值,而wanhua.init调用时已经赋值,三楼的改法可行,能保证也是调用wanhua.init时执行的