我有一个很长的向导形式,就像我网站上的调查一样。我想写一个jQuery函数,这样当用户意外点击页面上的任何链接时(向导的预览和下一个按钮除外),首先会询问:你确定要继续吗?然后它被重定向到他点击的链接,如果他点击取消,没有任何反应..
到目前为止我所做的是页面的每个链接除了(next& previw)我添加了一个类link_ridirect
所以我可以抓住所有的锚链接。并停止重定向。
jQuery功能如下!
<script type="text/javascript">
<!-- HERE IS THE SEARCH FILTER -->
//<![CDATA[
var GLOBAL_NAMESPACE = {};
$(document).ready(function(){
GLOBAL_NAMESPACE.value_changed = true;
});
$(document).ready(function () {
$('.link_redirect').bind('click',function (e) {
e.preventDefault();
if (GLOBAL_NAMESPACE.value_changed){
var res = confirm('you have unsaved changes. Do you want to continue?');
if(res){
window.location.href = $(this).attr('href');
}else{
console.log('stay on same page...');
}
}
});
});
//]]>
</script>
所以我想要做的是如何声明一个全局变量来跟踪所有字段状态。因此,如果字段发生更改,则将其设置为true并调用prevent函数。
答案 0 :(得分:3)
这样做:
$('a').click(function(){return confirm("are you sure?");});
将其放置在html的底部,或页面的上传位置,或放在OP中建议的文档中。
修改强>
如果您只想在变量changesDetected
为true
时执行此操作,请执行以下操作:
$('a').click(function(){return !changesDetected || confirm("are you sure?");});
答案 1 :(得分:2)
看起来您已经有代码来中断默认的A-tag点击,所以问题的关键在于检测字段何时发生变化,以便在导航之前询问是否要保存?
这是一个JSFiddle Detect Field Changes:
它向所有可编辑字段添加一个onchange事件,如果更改了某些内容,则将全局stae设置为true。
如果用户输入字段然后退出而不更改,则不会检测到任何更改。
function setup() {
// bind the change event to all editable fields. Runs on load(or doc ready)
$("input,select").bind("change",function(e) {
GLOBAL_NAMESPACE.value_changed = true;
});
};
答案 2 :(得分:1)
您需要使用 beforeunload 事件。当你离开页面时会处理这个事件。
$(this).on("beforeunload", function () {
return 'are you sure';
});
如果需要,该事件称为非预览按钮,接下来,您可以取消绑定此事件处理程序。
$('#myPreviewButtonId').click(function()
{
console.log('preview clicked');
$(this).unbind("beforeunload");
});
答案 3 :(得分:0)
(function($) {
$.fn.checkFileType = function(options) {
var defaults = {
allowedExtensions: [],
success: function() {},
error: function() {}
};
options = $.extend(defaults, options);
return this.each(function() {
$(this).on('change', function() {
var value = $(this).val(),
file = value.toLowerCase(),
extension = file.substring(file.lastIndexOf('.') + 1);
if ($.inArray(extension, options.allowedExtensions) == -1) {
options.error();
$(this).focus();
} else {
options.success();
}
});
});
};
})(jQuery);
$(function() {
$('#image').checkFileType({
allowedExtensions: ['jpg', 'jpeg'],
success: function() {
alert('Success');
},
error: function() {
alert('Error');
}
});
});
label {
display: block;
font-weight: bold;
margin-bottom: 0.5em;
}
<form action="#" method="post" enctype="multipart/form-data">
<div>
<label for="image">Upload image (JPEG only)</label>
<input type="file" name="image" id="image" />
</div>
</form>
答案 4 :(得分:0)
如果确认功能的结果为假,则必须阻止默认操作
$(document).ready(function () {
$(".deleteJob").on("click", function (e) {
if (!confirm("Are you Sure want to delete!")) {
e.preventDefault();
}
});
});