onclick返回false的标签;仍然可以点击
a tag with onclick return false; still clickable
我有一个链接:
<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; }
,但一旦它到达锚标记,按钮仍然为文件下载提供服务。
您需要执行以下操作之一:
$('#trigger')[0].onclick = function () {return false;}
或
$('#trigger').click(function () {return false;});
if( $('#input_1').hasClass('valid') )
{
$('#trigger').attr("onclick", null);
}
else // disable the button
{
$('#trigger').on('click', function(e) { e.preventDefault(); } );
}
最好使用.preventDefault
方法
也只对表单控件使用.prop
方法。
对于这样的情况,我喜欢让人们更难绕过前端安全。(但只有一点点,但显然这很容易被忽略。)
- 如果无效,请调用event.prventDefault()
- 如果无效,请将类添加到元素中。此类将
pointer-events
设置为none,因此不会注册点击 - 检查是否已设置全局JS变量
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();
}
});
.disabled {
opacity: 0.5;
pointer-events: none;
}
<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>
相关文章:
- Array.every返回false,而不是类型error
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 为什么当我在数组上测试regex时,它会返回false
- 检查文本区域是否为空总是返回false
- PHP strtotime()为JavaScript日期字符串返回false
- onsubmit返回false,但submit仍然执行
- 这个代码会返回false吗
- Ajax向表单返回false
- 表单验证JavaScript编号总是返回false
- 使用!而in运算符在应该为true时返回false,为什么
- jQuery.is(':checked')总是返回false
- Javascript 下划线每个总是返回 false
- 提交返回 false 总是在 jquery 中
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 基本JavaScript不断返回false
- 布尔对象上的逻辑 NOT 在 Javascript 中总是返回 false
- jquery focusin没有'调用.focus()并返回false;时无效;
- Ajax-执行成功前返回false
- jQuery JSON flickr提要返回false不工作