JavaScript练习一之键盘敲击获取关键词

在后台项目开发中,有个过程是需要交互获取关键词,因为当时项目紧急,所以就直接用了点击事件,事后回想起来觉得交互起来特别不友好,所以决定开个组件进行练习。后在其他后台项目中成功了运用。效果还是不错的。

  JS代码清单 :
 
// @charset "utf-8";
 /**
 * @function : 键盘敲击获取关键词(练习)
 * @author   : yinggaozhen
 * @create   : 2015-11-06
 * @version  : 0.0.0
 * @example  :
 *  var option = {
          'shockInput'        :     '#keyword',
          'showArea'             :     '#showarea',
          'shockShowClass'       :     'showLable'
     }
      var tonkObj = new window.tonk(option);
     tonkObj.launch();
  */
  (function($, window) {
      var quota             = 'tonk';
      var dtaSuffix         = 'tags';
      var cancelPic         = 'cancel-tonk-pic';
 
      Object.prototype.isExsistDom = function(parent) {
          var parent = parent || undefined;
 
          if (parent === undefined) {             
              return this.length > 0 ? true : false;    
          }
          return $(parent).find(this).isExsistDom() ? true : false;
      }
 
       Object.prototype.addNewClass = function(domNewClass) {
          if (typeof domNewClass == 'string') this.addClass(domNewClass);
          return this;
      }
 
      Array.prototype.removeDeignElement = function(element) {
          this.splice($.inArray(element, this), 1);
          return this;
      }
 
      var tonk = function(option) {
          var me = this;
          me.options = $.extend({}, me.defaultOption, option);
          me.$ipEl = $(me.options.shockInput);
          me.$swEl = $(me.options.showArea);
          return me;
      };
 
      tonk.prototype = {
          launch : function() {
              var me = this;
              if (me.$ipEl.isExsistDom() == false || me.$swEl.isExsistDom() == false) {
                  return;
              }
 
              me.$ipEl.addNewClass(me.options.shockInputClass);
 
              me.tonkEvt();
              me.cancelXClickEvt();
          },
          tonkEvt : function() {
              var me = this;
              me.$ipEl.keydown(function(event){
                  if (event.keyCode != me.options.clickEvt) return;
 
                  if (!me.isTonkValidIp($(this).val())) {
                      return;
                  }
                  me.saveInputVal();
                  me.renderShowArea();
              })
          },
          cancelXClickEvt : function() {
              var me = this;
 
              $('.' + cancelPic).live('click', function() {
                  var tagName = $(this).attr('tagName') || '';
                  me.$ipEl.data(dtaSuffix, me.$ipEl.data(dtaSuffix).removeDeignElement(tagName));
                  me.renderShowArea();
              })
          },
          saveInputVal : function() {
              var me = this,
                   ipVal = me.$ipEl.val() || '';
 
              if (typeof me.$ipEl.data(dtaSuffix) == 'undefined') me.$ipEl.data(dtaSuffix, new Array());
              me.$ipEl.data(dtaSuffix).push(ipVal);
              me.$ipEl.val('');
 
              if (me.options.autoFocus == true) me.$ipEl.focus();
          },
          getInputVal : function() {
              var me = this;
              return typeof me.$ipEl.data(dtaSuffix) == 'undefined' ? new Array() : me.$ipEl.data(dtaSuffix);
          },
          renderShowArea : function() {
              var me = this;
 
              if (typeof me.$swulEl == 'undefined') {
                  me.$swulEl = $('<ul/>').addNewClass(me.options.shockShowClass);
                  me.$swEl.append(me.$swulEl);
              }
 
              me.$swulEl.html('');
              $.each(me.$ipEl.data(dtaSuffix), function(k, v) {    
                  me.$swulEl.append(me.renderTag(v));
              })
           },
          renderTag : function(tagName) {
                  var tTagHtml = "<li class='def_tonk_tag'>" + tagName + "<img src='label_03.png' class=" + cancelPic + " tagName=" +  
  tagName + "></li>";
               return tTagHtml;
           },
           isTonkValidIp : function(tonkIp) {
               var me = this;
               return tonkIp.length < parseInt(me.options.minInputLength) || tonkIp.length > parseInt(me.options.minInputLength) ?
 false : true;
           },
      }
 
      tonk.prototype.defaultOption = {
          'shockInput'        : '',
         'showArea'             : '',
          'shockInputClass'    : '',
         'shockShowClass'     : '',
         'minInputLength'    : '',
         'maxInputLength'    : '20',
         'clickEvt'             : 13,
         'autoFocus'         : true
      }
      return window[quota] = tonk;
  })(jQuery, window);

 感悟:
 1、样式很重要,通过传参形式以达到灵活配置的目的
 2、在后续改进中,发现在proyotype的时候一直出问题,虽然具体不知道原因所在,最后发现是原型的锅。原型虽然在一定程度上可以精简代码,加强逻辑,但是不能滥用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值