【发布时间】:2014-11-11 10:41:30
【问题描述】:
问题来了:
我有一个标签,当我点击它时,我的 href 值会出现一个弹出窗口(fancybox),
<a class="myIdentifier" href="#myPopup">pop</a>
但是,当我点击它时,我必须使用 ajax 做一些事情来将字段更新到我的弹出窗口中......在它出现之前!
$("body").on('click','.myIdentifier',function(event){
//DO SOME AJAX AND FILL MY POPUP FIELDS
});
所以这个 ajax 东西必须在“href”用于调用弹出窗口之前完成......
我正在寻找一种方法在我执行 jquery 功能时禁用我的 href,然后重新启用它以使弹出窗口出现...
谢谢
编辑/更新 ::
嗯,谢谢你的所有回答,但是,看看这个:
<a class="btn btn-warning editImp" href="#editImpPopup" title="Edit" id="22">EDIT</a>
<a class="btn btn-warning editImp" href="#editImpPopup" title="Edit" id="32">EDIT</a>
<a class="btn btn-warning editImp" href="#editImpPopup" title="Edit" id="44">EDIT</a>
preventDefault() 不起作用...看起来fancybox 不关心它...事件是用href 触发的...
我使用 jquery.fancybox.js,这是一个库,我不知道如何手动调用弹出窗口!我想我应该把这些a标签变成其他不响应fancybox代码的标签,应用我的ajax东西来填写表格,然后“手动生成”一个“点击带有“editImpPopup”的href设置的aa标签”.. .
但是怎么做??
谢谢!
(对不起我的英语,这不是我的母语......)
完整代码:
HTML(调用弹出窗口的链接):
<span class="linkhere">
<a class="btn btn-warning editImp" href="#editImpPopup" title="Modifier" id="191-150">
<i class="fa fa-edit"></i>
</a>
</span>
<span class="linkhere">
<a class="btn btn-warning editImp" href="#editImpPopup" title="Modifier" id="190-140">
<i class="fa fa-edit"></i>
</a>
</span>
JS(初始化fancybox):
$(".editImp").fancybox({
type :"inline",
closeBtn :true
});
JS(on.click 函数,我在表单中填写我的输入):
$("body").on('click','.editImp',function(){
var id=this.id;
var tab = id.split('-');
id = tab[0];
var ets = tab[1];
$.ajax({
type : 'POST',
url : './php/utils/getImpData.php',
data : {'id':id},
dataType : 'json',
error : function(response){
alert("ERROR GET IMPLANTATION DATA");
},
success : function(response){
alert(JSON.stringify(response));
$("#etsEditImp option").removeAttr('selected').filter("[value='"+ets+"']").attr('selected',true);
$("#stageEditImp option").removeAttr('selected').filter("[value='"+response[0].stage+"']").attr('selected',true);
$("#downEditImp option").removeAttr('selected').filter("[value='"+response[0].down+"']").attr('selected',true);
$("#locEditImp option").removeAttr('selected').filter("[value='"+response[0].loc+"']").attr('selected',true);
$("#nameEditImp").val(response[0].name);
$("#streetEditImp").val(response[0].street);
$("#numEditImp").val(response[0].num);
$("#bEditImp").val(response[0].b);
$("#prevStage").val(response[0].stage);
$("#prevDown").val(response[0].down);
$("#idImp").val(id);
$("#prevEts").val(ets);
}
});
});
更新 2:
我试试这个...:
$(".editImp").fancybox({
type :"inline",
closeBtn :true,
beforeLoad : function(event){
alert("TEST");
var id=$(this).id;
var tab = id.split('-');
id = tab[0];
var ets = tab[1];
$.ajax({
//...CODE
});
},
onStart : function(){alert("TESTSTART");}
});
我收到此错误:id 未定义! 我无法将 id 恢复到这部分?
【问题讨论】:
-
@divakar:
href已经是一个哈希引用。并且在点击事件被处理后将它改回来并不会真正做任何事情...... -
你必须在完整的函数中手动调用fancybox才能进行ajax调用
-
你如何初始化fancybox?我想说最好的方法是使用
beforeLoad回调... -
@reyaner
async: false是一件坏事。 -
@reyaner 因为浏览器 UI 将挂起直到 Ajax 调用结束
标签: jquery ajax dom hyperlink href