2013-09-24 60 views
3

我有一個div,點擊右移,然後再次點擊,它回到左邊(它的通訊彈出)。一切都在Safari和Chrome中完美運行,但是在Firefox和IE中它只會打開,當您再次單擊時它將不會關閉。我正在使用.bind()和.unbind() 有什麼建議嗎?我正在使用jQuery版本1.3.2。.bind()JavaScript在Firefox和IE中不起作用?

FF錯誤:NS_ERROR_XPC_BAD_CONVERT_JS:無法轉換的JavaScript參數arg 0 nsIDOMWindow.getComputedStyle]

IE錯誤:SCRIPT16386:不支持此接口

的Javascript:

$(function() { 
    $('.newsletter').bind('click.open', open) 
    $(window).resize(function() { 
     var wWth = $(window).innerWidth(), 
      wHgt = $(window).innerHeight(); 
     $('#overflow').fadeIn('slow').css({ 
      width: wWth, 
      height: wHgt 
     }); 
    }); 
}); 

function open() { 
    var overflow = $('<div id="overflow"><div>'); 
    $(this).stop().animate({ 
     left: '-35' 
    }, 650); 
    if ($('#overflow').length < 1) { 
     $('body').append(overflow); 
    } 
    var wWth = $(window).innerWidth(), 
     wHgt = $(window).innerHeight(); 
    $('#overflow').fadeIn('slow').css({ 
     width: wWth, 
     height: wHgt 
    }); 
    $('.newsletter').unbind('click.open').bind('click.close', close) 
} 

function close(e) { 
    if ($(e.target).is('input')) return; 
    $('#overflow').fadeOut('slow') 
    $('.newsletter').stop().animate({ 
     left: '-390px' 
    }, 650); 
    $('.newsletter').unbind('click.close').bind('click.open', open) 
} 

HTML

<div class="newsletter_signup"> 
<div id="newslettertext1"> 
    Newsletter bestellen<br> 
    <br> 
    Lassen Sie sich per Newsletter &#252;ber Neuheiten und <br> 
    Aktionen von Tempur informieren. Jetzt anmelden 
</div> 
<div id="signup"> 
    <form id="leftnewsletter" action="" method="get"> 
    <input type="email" name="email" id="emailsignup" placeholder="E-MAIL ADDRESS" style="margin-left:76px; margin-top:16px; width:187px;"> 
    <input type="submit" name="signupbtn" id="signupbtn" value="SIGN UP" class="signupbutton"> 
</form> 
</div> 
<div id="newslettertext2"> 
    *Sie k&#246;nnen jederzeit Ihre Einwilligung zum Erhalt des<br> 
Newsletters zur&#252;ckziehen und sich abmelden. 
</div> 

+0

你能分享相關的html也 –

+0

原因可能是在破碎的HTML佈局(錯誤地關閉標籤)。這是瀏覽器在類似情況下行爲不同的最常見原因。 – keaukraine

+2

這將有助於指定您正在使用的jQuery版本。 – Spudley

回答

1

得到它通過簡化代碼的工作下來:

$('.newsletter_signup').click(function(event) { 
    if(!$(event.target).is('input')) { 
     if (parseInt($(this).css('left')) == -35) { 
      $(this).stop().animate({ left: '-390px' }, 650); 
     } else { 
      $(this).stop().animate({ left: '-35px' }, 650); 
     } 
    } 
}); 

完美的作品,現在,謝謝大家的幫助! :)

0

很難說問題出在哪裏,可能是在你的HTML代碼及其操作的某個地方。

你的代碼示例工程上的jQuery 1.3.2:http://jsfiddle.net/aneSm/

幾點建議:

  • 更新您的jQuery核心版本,你的插件無法在1.3.2上運行;該驗證分鐘的版本是1.6.4,對於旋轉木馬我不知道(...)
  • 檢查不會對您 使用插件未包裹的節點附近的任何評論。(參考文獻1)
  • 檢查是否有一個(直接與否)getComputedStyle DOM節點 上不能有風格(如文本節點)

參考。 1

<!-- Comment --> 
<div> 
    ... 
</div> 
1

在jQuery 1.7的,所述.on()方法是事件處理程序安裝到一個文件的優選方法。

過去有討論過detailed post

總之,.bind()只是爲了兼容性的目的,我們應該忘記它,並使用更靈活的.on()來代替。

$('.newsletter').bind('click.open', open) 

到:

對於您的問題,您bind()的語句從改變

$(document).on('click', '.newsletter', open); 

UPDATE:

由於您使用jQuery的一個非常早期的版本,我想你最好的選擇是使用.noConflict加載兩個v ersions在一起。自1.3以來,jQuery已經改變了很多。這是可以理解的,你可能毫不猶豫地升級,因爲您的舊代碼,可能使用一些舊的功能,如瀏覽器檢測等

因此,這裏是你怎麼做:

jqNew = jQuery.noConflict(true); 

則可以使用jqNew(document).on(event, selector, function);或任何綁定你的事件。舊代碼將繼續使用$.xxx。有一個例子here。將該頁面向下滾動到該部分:示例:加載兩個版本的jQuery(不推薦)。然後,將jQuery的全局作用域變量恢復到第一個加載的jQuery。

+0

我在綁定之前使用on/off方法,但是我遇到了通訊根本無法打開的問題?這就是爲什麼我試圖使用綁定 –

+0

只是更新了答案。您可能要考慮在舊版本之前加載新版本的jQuery。 – Blaise

相關問題