2013-03-12 45 views
0

我有一個叫做flyout的函數,它在單擊按鈕時滑動菜單div,然後再次點擊。Jquery IE的外部自定義函數是不明確的

問題1:它在Chrome,FF等運行良好,但IE9告訴我,flyout is undefined,雖然功能仍然有效。

問題2:在IE8中沒有錯誤消息,但菜單滑入和退出一次單擊。

我不確定但希望兩個問題都有關係。我對Jquery和Jquery UI相當陌生,所以我不確定我是否正確使用了所有東西。任何幫助將非常感激。

JS在外部JavaScript文件:

$(function flyout() { 
    $(".btn-toggle").click(function (e) { 
     var newSelector = $('#flyout-' + $(this).attr('id')), 
      toggle = newSelector.css('display') == 'block'; 

     e.preventDefault(); 
     newSelector.toggle('slide', { direction: 'right' }, 300); 
     $('.hide').not(newSelector).hide('slide', { direction: 'right' }, 300); 

     if (!toggle) { 
      newSelector.children('.l-menu').effect('highlight', 1000); 
      $('a.btn-toggle i').removeClass('icon-chevron-right'); 
      $(this).find('.icon-chevron-left').toggleClass('icon-chevron-right'); 
     } else { 
      $(this).find('.icon-chevron-left').toggleClass('icon-chevron-right'); 
     }; 
    }); 
}); 

HTML和JS:

<a href="#" id="fo2" class="btn btn-small btn-info btn-toggle"><i class="icon-chevron-left"></i> <i class="icon-thumbs-up"></i> Helpful Hints</a> 
<a href="#" id="fo1" class="btn btn-small btn-amber btn-toggle"><i class="icon-chevron-left"></i> <i class="icon-tasks"></i> Progress</a> 

<div id="flyout-fo2" class="fixed-tr hide"> 
    ...Menu HTML 
</div> 
<div id="flyout-fo1" class="fixed-tr2 hide"> 
    ...Menu HTML 
</div> 

<script type='text/javascript' language='javascript'> 
    $(document).ready(function() { 
     flyout(); 
    }); 
</script> 
+0

可能有一些反對命名匿名函數的規範。 – 2013-03-12 20:16:01

+0

這不是一個匿名函數,他正在製作一個函數的jQuery對象。 – Niels 2013-03-12 20:16:49

+0

@Niels'$(function)'是'(document).ready(function(){})的快捷方式;' – 2013-03-12 20:18:28

回答

0

你正在一個功能的jQuery對象。爲什麼?

更改外部文件到這一點:

function flyout() { 
    $(".btn-toggle").click(function (e) { 
     var newSelector = $('#flyout-' + $(this).attr('id')), 
      toggle = newSelector.css('display') == 'block'; 

     e.preventDefault(); 
     newSelector.toggle('slide', { direction: 'right' }, 300); 
     $('.hide').not(newSelector).hide('slide', { direction: 'right' }, 300); 

     if (!toggle) { 
      newSelector.children('.l-menu').effect('highlight', 1000); 
      $('a.btn-toggle i').removeClass('icon-chevron-right'); 
      $(this).find('.icon-chevron-left').toggleClass('icon-chevron-right'); 
     } else { 
      $(this).find('.icon-chevron-left').toggleClass('icon-chevron-right'); 
     }; 
    }); 
} 
+0

Thanks @Niels!我基本上是這樣做的,因爲我需要它用在30頁左右。我先將它內聯編寫,然後將其移至外部文件。有沒有更好/正確的方法來做到這一點?謝謝 – AndyD 2013-03-13 09:06:59

+0

也感謝@Brad M.你寫的東西幫助我更好地理解。 – AndyD 2013-03-13 09:25:43

0

你基本上是添加兩個事件處理程序的DOM準備回調。

第一

$(document).ready(function() { 
    flyout(); 
}); 

再其次

$(function flyout() { 

$(function)$(document).ready(function(){});一個快捷方式。

解決方案是單獨聲明function flyout(){}。 然後做

$(flyout);