Issue with jquery tools overlay in Safari
I am trying to present a form inside an overlay. The form is loaded via ajax. This all works fine on firefox 3.x.
But on Safari 5.0(5533.16), the overlay shows but does not make an ajax request, rather makes a html request.
Here is how I configure it in my js and then on document.ready I call ModalPostForm.init();
pastie - http://pastie.org/1196064
var ModalPostForm = {
init: function(){
$("a[rel='#post_overlay']").each(function(){
//alert($(this).attr('href'));
$(this).overlay({
closeOnClick: false,
target: '#post_overlay',
fixed: false,
onBeforeLoad: function() {
// grab wrapper element inside content
var wrap = this.getOverlay().find(".contentWrap");
// load the page specified in the trigger
wrap.load(this.getTrigger().attr("href"));
},
onLoad: function() {
setTimeout("configurePostForm(200, 1000, 150)", 500);
},
onClose: function() {
$('.contentWrap').empty();
}
});
});
},
close: function(){
$("a[rel='#post_overlay']").each(function(){
var ol = $(this).data("overlay");
if(ol.isOpened()){
ol.close();
}
});
}
};
Here is my html
<div id="post_overlay" class="new-post-overlay span-12" style="top: 54.3px; left: 429px; position: absolute; display: none;"><a class="close"></a>
<div style="display: none;" id="form_loading" class="">
<div class="loading-inner-center"></div>
</div>
<div id="" class="contentWrap"></div>
</div>
Why is it issuing html request?
Thanks
UPDATE
This goes away if I remove the format.html block in my rails respond_to block in my controller actions.
Though the question remains why it it sending a html request or why rails thinks it is a html request. I would rather not remove that block, for browsers that indeed can't do js.
new action which causes the issue
respond_to do |format|
# format.html # new.html.erb
format.js {
}
# format.xml { render :xml => @post }
end
edit action which also causes the issue, both new and edit happen to be 'get' methods.
# format.html {
# if @edit
# #
# setup_post_items(true)
# else
# flash[:error] = 'Sorry no further edits, Post has already been approved.'
# redirect_back_or_default root_url
# end
# }
format.js {
if !@edit
开发者_C百科 flash[:error] = 'Sorry no further edits, Post has already been approved.'
end
}
I've also noticed that the format.html block sometimes catches js requests. There are two methods I've used to work around this issue (either of the following should fix it, you don't need to do both):
a) In your javascript, append ".js" to your target href. For instance:
if ( ! /\.js/.test($this.attr('href')) ) {
$this.attr('href', function(index, href) {
return href.replace(/([^\?]+)(.*)/, '$1.js$2');
});
}
b) In your controller, put the format.js block before the format.html block so that the javascript request matches the js block before it matches the html block.
精彩评论