zoukankan      html  css  js  c++  java
  • 超链接标签绑定JS事件&&不加"javascript:;"导致的杯具

    很久以来,在写Html和JS时,经常会给超链接<a>标签,绑定JS事件。

      我们经常看到这样的写法,<a href="javascript:;" onclick="doAction()" >Click</a>。

      我原来一直有个疑问,干嘛非要加上“javascript:;” 。原来,我很“老实”,每次都会加上。今天,又手敲了类似的代码,本着“老子就是不加,你咬我”的得瑟心态,我没有加上“javascript:;” 。

     最终的代码如下:
     <a href="" onclick="doRemove(${column.id},'${column.name}')">删除</a>

      function doRemove(id,name){

      if(confirm("确定要删除:"+name+"?")){

      $.post(

    "/column/doremove.json",{

    id:id

    },

    function(data){

    console.log(data);
                        }
    }  

    结果非常杯具。
    后台一直可以收到请求,但是前端就是没有打印data。 难道是么有返回值么?

    但是,我打开新的窗口,单独发送“doremove.json” 请求,是有返回值的。

    百思不得其解。
    与其它正常代码对比,采用“控制变量法” ,逐步对“哪个地方的代码有不同”,但是我发现JS代码的思路完全一致。

    我在反复尝试过程中发现的现象:前端confrim对话框, 后端有请求,最后也有响应。
    但是后端一直打印,“render view /column/list.html” 。
    JS执行完了,怎么要渲染新页面呢?

    最后,突然想到,<a href="#" >click</a> 这种超链接的"href"没有值,点击的时候,打开的页面其实是“当前页面”,比如
    当前页面是“http://localhost:8080/column/list” ,打开的页面还是当前页面。

    通过后台打印日志,前端不出数据,以及以前写html的经验,最终想起自己没有写“javascript:;” 很可能是导致这个结果的原因。

    最后,加上之后,代码完全正常。
    ------------------------------------------
    我在想,我们经常提交form表单的时候,如果在事件方法里返回false,表单就不会提交。
    <input type="submit" onclick="onsubmit()" />

     "javascript;;"起到的作用相同。

    ---------------------------------------
    <a href="" onclick="return doRemove(${column.id},'${column.name}')">删除</a> 
    doRemove直接返回false,仍然会打开这个超链接。 

     最终结论:<a href="javascript:;" onclick="doAction()" >Click</a>,老老实实这样写吧,别得瑟。

  • 相关阅读:
    <td>标签clospan和rowspan 可横跨列数和行数
    网线水晶头接法
    安装在墙上的网线接口坏了的处理方法
    php array 数组及数组索引
    php strpos返回字符串首次出现的位置
    escape()、encodeURI()、encodeURIComponent()区别详解
    smarty assign 赋值
    二叉搜索树(搜索二叉树)转换成一个双向链表
    new malloc和delete free 的区别
    两个栈实现一个队列
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463110.html
Copyright © 2011-2022 走看看