wf_aimee
wf_aimee
2010-06-08 09:59
浏览 283

下拉列表是可输入的,当输入的时候触发onchange事件,当选择的时候触发onpropertychange事件

下拉列表是可输入的,我想要当输入的时候触发onchange事件,当选择的时候触发onpropertychange事件,请问该功能如何实现?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • eplang
    eplang 2010-06-08 10:55
    已采纳

    输入时不触发onpropertychange是不可能的.
    你修改了文本框的值就是修改了文本框的value属性, value属性一变动就会触发onpropertychange事件, 这个是避免不了的.

    只能从事件优先级中规避这问题.
    往文本框里输入东西的话(假设只考虑输入键盘输入), 敲一个字符, 肯定会触发和键盘相关的三个事件, keydown, keyup, keypress.
    keydown的时候, 字符还没出来, keyup和keypress的时候, 字符就出来了, 字符一出来就会触发onpropertychange事件.

    所以我们可以创建一个flag, 默认为false, 在keydown时, 为flag附值为true, 在onpropertychange时, 判断一下flag是否为true, 如果为true, 就代表是敲入字符所触发的, 那我们就将flag赋值为false, 其他啥都不做, 直接返回.

    这样应该可以一半达到你所要实现的效果了.

    至于别人不用键盘输入, 而是右键粘贴这个... 你就自己琢磨一下吧. 看看onchange和onpropertychange哪个优先级高, 或者还有什么事件可以利用的.

    点赞 评论
  • eplang
    eplang 2010-06-08 10:05

    你是已经做出可输入的下拉框了?
    如果没有的话, 建议去Jquery找下combox组件来用比较好.

    除非你是想练手玩玩JS, 那还能自己开发一个.
    以前我刚参加工作的时候就自己做过一个, 刚开始对JS只是一知半解, 花了很长时间, 但完成后对我的JS水平提升相当大.

    如果是项目急着用的话, 还是直接拿现有的组件比较好, 没必要重复造轮子嘛.

    点赞 评论
  • eplang
    eplang 2010-06-08 10:31

    就是这样的,我是想当下拉列表时选择的话能触发text的onpropertychange事件,当是输入的话触发text的onChange事件;


    当往Text里输入的时候要触发text的onChange事件? 回答得有点古怪啊.

    是想做到下拉框选择某一个值时, text上面的值会变成下拉框选中的值.
    当往text里输入值时, 下拉框会根据输入的内容, 联动选择一个最近似的值?

    点赞 评论

相关推荐