怎样阻止input file文件域的change/onchange事件多次重复执行?

方法和原理就是:

  • 你本身是无法阻止文件域的onchange事件多次 被 触发的, change(function(){....}); 方法会被多次执行的, 这个是无法改变的!
  • 你可以做的是: 当每次 执行change()方法的是, 通过一个标志变量, 来判断change方法是否已经被执行, 当由 标志变量 探测到change方法 已经被执行过, 时就直接让 change方法退出
function upGo(){
  $('#upload').click();  // 触发fie域点击事件动作
  var changeExed = false; // 这个是标志变量, changeExed: change is executed?

  $('#upload').change(function (ev){
    if(!changeExed){  
      changeExed = true;  // 执行一次后, changeExed就设置为true, 所以该代码段 只能执行一次, 后面如果发生的 change事件执行的代码 为空!  但是, 第二次及以后的change事件还是 发生 并 是执行了的! 

      var uf = ev.currentTarget.files[0];
      var fname = uf.name;
      .......
     };  // change 方法结束


///     要注意  在change方法中, 返回fale 并不能让change代码只执行一次, 只是: return false 阻止浏览器的默认行为 不能???

===========================================================

在js的split方法中, 如何写正则表达式规则的形式?

  • 注意的是, js.split 方法中, 正则表达式, 一定要在两边 加上 斜杠 /..../, 其次, 不能在正则表达式上 加 引号! 因为加上引号后, js就认为是字符串, 不是正则表达式了
  • 读取的文本内容 中可能有 html标签, 这些标签在 容器中会被hmtl 执行, 所以 要把这些标签进行 转换 成无意义的纯字符.
      reader.onload = function(){
	content = this.result;
	
	// 在这里处理读取到的文本内容
	var arr = content.split(/\r\n|[\n\r]/);    就是这里的关键
	var strCont ='';
	for(var i=0, j=arr.length; i<j; i++){
	  strCont += '<span>' + arr[i] + '</span><br>';
	}

	$('div.uc>p').html(strCont);
	$('div.showuc').css('display','block');
      };

=====================
js如何删除数组中的某个元素?

  • 使用 splice(注意不是 slice 切片函数), splice(start, howmany)是用来删除/替换/添加的函数. 从start索引开始删除howmany个数组元素. splice函数会改变数组本身, 所以,不用返回值接受 , arr.splice(arr.length-1,1)
  • 使用delete 方法, 但是 该方法把某个元素 只是变成 'undefined'值, 数组的长度也不会改变
  • 使用 pop()方法, 该方法删除最后一个元素, 同时返回最后一个元素的值, 这里你不要/丢弃 返回值就好了.

css中的overflow?

  • css的属性 如果是多个单词, 都是用 连字符- 来连接, 不是 pascal方法的大小写驼峰法: 比如: style="max-heigth: 300px;", 不能写成 maxHeight: 300px;

  • overflow的 scroll和 auto区别: 前者不管宽高是否超出都显示 滚动条; 后者是通常不显示滚动条, 只有超出宽高才显示滚动条

==============

元素的hidden隐藏后, 如何显示?

  • 要用 removeClass('hidden')来显示出来, 不能用 设置css('display','inline-block')来显示, 因为这时候, hidden类并没有被删除;
  • 只有用 display: none隐藏的元素, 才可以用 display: block来显示出来

===============
所谓浏览器的默认行为?就是 在元素上 并没有 显式的 绑定什么事件, 但是却发生的 行为behavior, 比如:

  • 点击链接发生的跳转事件/
  • 点击 input type=submit元素 发生的表单提交事件/
  • 在键盘输入的字符自动添加到text类型的input中, 都是 浏览器的默认行为
  <a href="http://www.abc.com">click me to jump</a>
  <script>
    var aa=document.getElementsByTagName('a')[0];
    aa.addEventListener('click', function(e){
      e.preventDefault();  // 这样, 点击a不会发生跳转
    })
  </script>

posted @ 2020-02-28 21:19  noitanym  阅读(2221)  评论(0编辑  收藏  举报