我有
<a href="url" onclick="var msg = confirm('Confirm?'); submit(msg, event);">Click me</a>
我想要做的是获取确认框结果(true / false),将其传递给提交按钮,然后如果错误则终止href调用。
我在开发环境中工作,但是当我将其加载到跨浏览器场景时,第二个调用无效:
function submit(msg, evt) {
if(msg == true) {
$.ajax({
type:"POST",
data:{answer:'Correct'},
url:'https://myurl/p'
});
}
else { evt.preventDefault(); return false; }
}
传递的URL只是URL,没有数据(在生产中)。这个确切的代码在我的环境中完美运行,但在跨浏览器方案中它失败了。如果我删除确认框,一切都很完美。
我觉得它与取消确认框时的preventDefault调用有关。那个preventDefault是否会禁用下一个使用相同链接的呼叫?
答案 0 :(得分:1)
首先,请不要使用内联事件处理程序,您可以从标记中删除它并在它所属的js中处理它:
HTML:
<a href="url" id="myanchor">Click me</a>
JS:
anchor = $('#myanchor')[0];
anchor.on('click',function(){
var msg = confirm('Confirm?');
submit(msg, event);
});
其次,如果msg为true,则ajax调用会立即被页面重定向中断,这没有多大意义。我相信你想要在ajax调用完成后重定向,在这种情况下你应该使用:
function submit(msg, evt) {
if(msg == true) {
$.ajax({
type:"POST",
data:{answer:'Correct'},
url:'https://myurl/p',
complete: function(){window.location="url";}
});
}
evt.preventDefault();
return false;
}
答案 1 :(得分:0)
<a href="url" ID="myUrlID">Click me</a>
$(function(){
$("#myUrlID").click(function(event){
event.preventDefault();
var msg = confirm('Confirm?');
if(msg == true) {
$.ajax({
type:"POST",
data:{answer:'Correct'},
url:'https://myurl/p'
});
}
});
});