Проблема с наложением инструментов jquery в Safari - PullRequest
2 голосов
/ 03 октября 2010

Я пытаюсь представить форму внутри наложения. Форма загружается через ajax. Это все прекрасно работает на Firefox 3.x.

Но в Safari 5.0 (5533.16) оверлей показывает, но не выполняет ajax-запрос, а выполняет html-запрос.

Вот как я настраиваю его в моем js, а затем в документе. Я уже вызываю ModalPostForm.init ();

Пасти - 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();
            }
        });
    }
};

Вот мой 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>

Почему он выдает html-запрос?

Спасибо

UPDATE

Это исчезнет, ​​если я уберу блок format.html в моем rails response_to block в действиях моего контроллера.

Хотя остается вопрос, почему он отправил html-запрос или почему rails считает, что это html-запрос. Я бы предпочел не удалять этот блок для браузеров, которые действительно не могут делать js.

новое действие, вызывающее проблему

        respond_to do |format|
#            format.html # new.html.erb
            format.js {

            }
#            format.xml  { render :xml => @post }
        end

Действие edit, которое также вызывает проблему, как new, так и edit являются методами get.

#            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
                    flash[:error] = 'Sorry no further edits, Post has already been approved.'
                end
            }

1 Ответ

2 голосов
/ 05 ноября 2010

Я также заметил, что блок format.html иногда перехватывает js-запросы. Есть два метода, которые я использовал, чтобы обойти эту проблему (любой из следующих должен исправить ее, вам не нужно делать оба):

а) В вашем javascript добавьте ".js" к вашей целевой директории. Например:

if ( ! /\.js/.test($this.attr('href')) ) {
  $this.attr('href', function(index, href) {
    return href.replace(/([^\?]+)(.*)/, '$1.js$2');
  });
}

b) В вашем контроллере поместите блок format.js перед блоком format.html, чтобы запрос javascript соответствовал блоку js, прежде чем он совпадал с блоком html.

...