Jquery - 在页面加载后更改了目标元素
我一直无法找到关于我在本网站或其他任何网站上挣扎的任何讨论,但也许我没有提出正确的问题。我工作的一个Web界面搭载了树莓派无线扬声器,并且(我继承了它),几乎所有的POST请求与呼叫做$.ajax.
$().ready()
如下:Jquery - 在页面加载后更改了目标元素
$().ready(function(){
$(document).ajaxStart(function(){
$.blockUI({ message: '<img id="loadimg" src="img/loading.gif" width="64" />'});
}).ajaxStop($.unblockUI);
$("nav.setup-nav a").not("[target='_blank']").on("click", function (event){
event.preventDefault();
var href=$(this).attr('href');
$.ajax({
type:"POST",
url:href,
success:function (data){
$(".contentPanel").html(data);
$(this).blur();
$("html, body").animate({ scrollTop:100, scrollLeft:400}, 600);
},
});
return false;
});
});
哪支部队导航菜单中链接页面的所有内容加载到页面中心的div内。也就是说,除了具有target="_blank"
属性的页面。这是如此event.preventDefault
和链接到我们要加载到一个新窗口的外部页面时,UI阻塞的东西不会被调用。我将尝试简要描述我的问题:其中一个菜单项是(有条件的)指向基于Web的MPD客户端的链接,我们绝对不希望在同一页面的div中加载,因此具有target="_blank"
属性。问题是用户也可以选择通过Web界面启用或禁用MPD守护进程。 PHP处理所有这些类型的状态变量的设置。基本上是这样的:
if ($config->is_flag_set($MPD_FLAG))
{
echo '<li><a target="_blank" id="mpd" href="rompr/">Local Playback Web Interface</a></li>';
}
else
{
echo '<li><a id="mpd" href="local-disabled.php">Local Playback Web Interface</a></li>';
}
所以当第一次加载页面,如果MPD守护程序没有运行的链接网页界面指向解释MPD页面未启用。此链接不包含target="_blank"
属性。但是,如果导航到设置表单并打开MPD,则有逻辑来替换该特定链接的href和target属性,因此理论上所有工作都应该像页面最初加载了MPD标志一样工作(如果是明确!)。问题是,当target="_blank"
(由.prop()
或.attr()
设置,我已经尝试过这两个并且似乎没有区别)的“替换”链接被点击后,页面仍然在div内加载!我尝试复制在$().ready
中定义的点击处理程序,并将其放入另一个函数中,在设置了链接属性后调用它,但它仍然不起作用,因为我认为它应该!为了验证我没有发疯,我使用.each()
来打印所有链接,并且没有target="_blank"
属性,并且这些链接都与我认为应该是的相对应。为什么被替换的链接不被视为在点击处理程序中具有target="_blank"
属性?顺便说一下,如果MPD关闭,则以其他方式去除target="_blank"
属性,就像魅力一样。非常感谢您提供任何答案,如果我重复了上一个问题,我很抱歉!
欢呼声,
任何时候你必须用ajax重新加载元素时,事件总是很棘手。我发现最好的办法是附加的事件,一些容器元素,不会重新加载:
$('#always_present_container').on('click', "nav.setup-nav a", function (event){
if($(this).attr('target') != '_blank'){
...
}
});
这样被点击的容器,当元素被检查的属性。当你设置$('element')。click()时,选择器在页面加载和附加事件上被选中,所以当你通过ajax重新加载某些东西时,新元素不会附加这个事件。
注意:通常你可以避免函数中的条件语句,但我不知道在css选择器中按目标过滤的简单方法。
那就是票。现在我觉得愚蠢 - 父导航元素永远不会改变,我只是忘了你可以传递一个选择器参数给'.on()'!谢谢! – jhansen317 2014-08-29 20:27:58