search

Home  >  Q&A  >  body text

javascript - 新手,求热心的前辈帮忙看看我这个if判断到底哪里出了问题,非常感谢!

为什么这样可以

但是把 inp.value的值赋给一个变量代替它就不行了?

PHPzPHPz2902 days ago258

reply all(6)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 17:03:49

    这里面你把inp.value赋值给了一个局部变量,但之后你是给这个局部变量赋的值,而不是给inp.value,你的inp.value不会受到影响。
    所以这里if语句没有问题,问题出在了赋值语句没有写成inp.value
    把if语句里的val改成inp.value就Ok了

    reply
    0
  • 阿神

    阿神2017-04-10 17:03:49

    inp.value是基本类型,基本类型赋值实现的是传值;
    val = inp.value只是把inp.value的值给了val,所以你只是修改了val的值。
    基础类型赋值是不会改变源数据的;只有引用类型的赋值是传址,修改才会引起源数据的变化。
    题主可以去看看红宝书里javascript的数据类型那块儿的内容。
    基本类型和引用类型

    reply
    0
  • 迷茫

    迷茫2017-04-10 17:03:49

    你在两个函数里分别声明了val,两个val并不在同一作用域,估计就是这个问题吧。。。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 17:03:49

    你只是给局部变量val付了值,但是inp.value始终未曾改变。应该在if里面把val换成inp.val即可。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 17:03:49

    你这样写也行,不过都要在事件函数最后加上

    inp.value = val;

    把变量的值再还给inp

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:03:49

    var inp = document.getElementById('inp')
    inp.onfocus = function(){

    var val = inp.value;
    if(val == ""){
        val = "今日特价优惠85折"; //这里的 val 变量是引用 inp.value 的值,对其重新赋值,不会改变 inp.value;
        inp.value = "今日特价油画85折"; //这样就可以了
    }

    };
    onblur 同 onfocus

    reply
    0
  • Cancelreply