开发者

Issue with jquery tools overlay in Safari

开发者 https://www.devze.com 2023-01-18 17:57 出处:网络
I am trying to present a form inside an overlay. The form is loaded via ajax. This all works fine on firefox 3.x.

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消