带onclick的标签返回false;仍然可点击

时间:2015-11-06 18:19:07

标签: javascript jquery html validation

我有一个链接:

<a id="trigger" href="file.pdf" onclick="return false;">Download pdf</a>

和这个Javascript:

// Check validation and enable or disable the <a> tag
if( $('#input_1').hasClass('valid') )
{
    $('#trigger').prop("onclick", null);    
}
else // disable the button
{
    $('#trigger')[0].onclick = function () { return false; }
}

然而,当验证失败时,即使使用

按钮仍然有效
onclick="return false;"

有人可以帮我理解这个以及如何有效地禁用锚标记吗?

更新:已修复$('#trigger')[0].onclick = function () { return false; }但是一旦这使其成为锚标记,该按钮仍然可以提供文件下载。

3 个答案:

答案 0 :(得分:1)

.preventDefault

更好地使用.prop方法。
也仅对表单控件使用 String inputFile = "C:\Users\...\file.txt"; FileInputStream in = new FileInputStream(inputFile); FileChannel ch = in.getChannel(); ByteBuffer buf = ByteBuffer.allocate(1024); ArrayList<Integer> list = new ArrayList<Integer>(); int column=-1; int row=0; int rd; while ((rd = ch.read( buf )) != -1){ buf.flip(); while (buf.hasRemaining()){ byte byteVal = buf.get(); if((byteVal == 48) || (byteVal == 49)){ //ascii code for 0 is 48 and for 1 is 49 column++; } if (byteVal == 92){ //ascii code for "/" is 92 as to know when it changes line row++; column=0; } if(byteVal == 49){ list.add(column); list.add(row); } } buf.clear(); } ch.close(); 方法。

答案 1 :(得分:1)

您需要执行以下任一操作:

$('#trigger')[0].onclick = function () {return false;}

$('#trigger').click(function () {return false;});

答案 2 :(得分:1)

对于这样的情况,我喜欢让人们更难以绕过前端安全性。 (但只是一点点,但显然这很容易被绕过。)

  1. 如果无效,请调用event.preventDefault()
  2. 如果无效,则将类添加到元素。此课程将pointer-events设置为无,因此无法注册点击次数
  3. 检查是否已设置全局JS变量
  4. &#13;
    &#13;
    var valid = false;
    
    $("#valid-checkbox").change(function() {
      var $this = $(this),
        trigger = $("#trigger");
    
      if ($this.is(":checked")) {
        valid = true;
        $this.val("valid");
        trigger.removeClass("disabled");
      } else {
        valid = false;
        $this.val("invalid");
        trigger.addClass("disabled");
      }
    });
    
    $("#trigger").click(function(e) {
      if (valid === false || $(this).hasClass("disabled") || $("#valid-checkbox").val() == "invalid") {
        e.preventDefault();
      }
    });
    &#13;
    .disabled {
      opacity: 0.5;
      pointer-events: none;
    }
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a id="trigger" href="http://www.keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image1.jpg" class="disabled" target="_blank">Download pdf</a>
    
    <input type="checkbox" value="invalid" id="valid-checkbox">
    <label for="valid-checkbox">Valid?</label>
    &#13;
    &#13;
    &#13;