最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - TypeError: jQuery(...).superfish is not a function. ul.sf-menu - Stack Overflow

programmeradmin0浏览0评论

I have seen jQuery SuperFish Error: jQuery(“ul.sf-menu”).superfish is not a function and this TypeError: jQuery(…).superfish is not a function post, I tried the suggestion given in ments and answers, but none worked for me.

I simply want the submenu to appear with a delay on mouse hover. I spend so much time but could not figure out the reason.

I am using superfish to add delay in the appearance of sub-menus. But its not working and in Mozilla-Firebug I get the error mentioned in title of question.

Here is the html code and snippet:

/*** ESSENTIAL STYLES ***/

.sf-menu,
.sf-menu * {
  margin: 0;
  padding: 0;
  list-style: none;
}
.sf-menu li {
  position: relative;
}
.sf-menu ul {
  position: absolute;
  display: none;
  top: 100%;
  left: 0;
  z-index: 99;
}
.sf-menu > li {
  float: left;
}
.sf-menu li:hover > ul,
.sf-menu li.sfHover > ul {
  display: block;
}
.sf-menu a {
  display: block;
  position: relative;
}
.sf-menu ul ul {
  top: 0;
  left: 100%;
}
/*** DEMO SKIN ***/

.sf-menu {
  float: left;
  margin-bottom: 1em;
}
.sf-menu ul {
  box-shadow: 2px 2px 6px rgba(0, 0, 0, .2);
  min-width: 12em;
  /* allow long menu items to determine submenu width */
  *width: 12em;
  /* no auto sub width for IE7, see white-space ment below */
}
.sf-menu a {
  border-left: 1px solid #fff;
  border-top: 1px solid #dFeEFF;
  /* fallback colour must use full shorthand */
  border-top: 1px solid rgba(255, 255, 255, .5);
  padding: .75em 1em;
  text-decoration: none;
  zoom: 1;
  /* IE7 */
}
.sf-menu a {
  color: #13a;
}
.sf-menu li {
  background: #BDD2FF;
  white-space: nowrap;
  /* no need for Supersubs plugin */
  *white-space: normal;
  /* ...unless you support IE7 (let it wrap) */
  -webkit-transition: background .2s;
  transition: background .2s;
}
.sf-menu ul li {
  background: #AABDE6;
}
.sf-menu ul ul li {
  background: #9AAEDB;
}
.sf-menu li:hover,
.sf-menu li.sfHover {
  background: #CFDEFF;
  /* only transition out, not in */
  -webkit-transition: none;
  transition: none;
}
/*** arrows (for all except IE7) **/

.sf-arrows .sf-with-ul {
  padding-right: 2.5em;
  *padding-right: 1em;
  /* no CSS arrows for IE7 (lack pseudo-elements) */
}
/* styling for both css and generated arrows */

.sf-arrows .sf-with-ul:after {
  content: '';
  position: absolute;
  top: 50%;
  right: 1em;
  margin-top: -3px;
  height: 0;
  width: 0;
  /* order of following 3 rules important for fallbacks to work */
  border: 5px solid transparent;
  border-top-color: #dFeEFF;
  /* edit this to suit design (no rgba in IE8) */
  border-top-color: rgba(255, 255, 255, .5);
}
.sf-arrows > li > .sf-with-ul:focus:after,
.sf-arrows > li:hover > .sf-with-ul:after,
.sf-arrows > .sfHover > .sf-with-ul:after {
  border-top-color: white;
  /* IE8 fallback colour */
}
/* styling for right-facing arrows */

.sf-arrows ul .sf-with-ul:after {
  margin-top: -5px;
  margin-right: -3px;
  border-color: transparent;
  border-left-color: #dFeEFF;
  /* edit this to suit design (no rgba in IE8) */
  border-left-color: rgba(255, 255, 255, .5);
}
.sf-arrows ul li > .sf-with-ul:focus:after,
.sf-arrows ul li:hover > .sf-with-ul:after,
.sf-arrows ul .sfHover > .sf-with-ul:after {
  border-left-color: white;
}
/*** adding the class sf-navbar in addition to sf-menu creates an all-horizontal nav-bar menu ***/

.sf-navbar {
  background: #BDD2FF;
  position: relative;
  margin-bottom: 5em;
}
/* provide background colour for submenu strip */

/* you should just set the menu's container bg colour rather than use pseudo-elements */

.sf-navbar:before {
  content: '';
  position: absolute;
  left: 0;
  z-index: -1;
  background-color: #BDD2FF;
  height: 200%;
  width: 100%;
}
.sf-navbar ul {
  box-shadow: none;
}
.sf-navbar li {
  background: #AABDE6;
  position: static;
}
.sf-navbar > li > a,
.sf-navbar > li > ul > li > a {
  border: none;
}
.sf-navbar > li > ul {
  min-width: 36em;
  /* set this to whatever suits your design */
}
.sf-navbar ul li {
  background: #BDD2FF;
  position: relative;
}
.sf-navbar ul ul {
  left: 0;
  top: 100%;
}
.sf-navbar ul ul li {
  width: 100%;
}
.sf-navbar > li > ul > li {
  float: left;
}
.sf-navbar li.current {
  background: #BDD2FF;
}
.sf-navbar li:hover,
.sf-navbar li.sfHover,
.sf-navbar ul li.current {
  background: #BDD2FF;
}
.sf-navbar ul li:hover,
.sf-navbar ul li.sfHover,
.sf-navbar ul ul li {
  background: #D1DFFF;
}
.sf-navbar ul ul li:hover,
.sf-navbar ul ul li.sfHover,
.sf-navbar ul ul li.current {
  background: #E6EEFF;
}
.sf-navbar ul li.current > a {
  font-weight: bold;
}
/*** point all arrows down ***/

.sf-arrows.sf-navbar ul .sf-with-ul:after {
  margin-top: -3px;
  margin-right: 0;
  border-color: transparent;
  border-top-color: #dFeEFF;
  /* edit this to suit design (no rgba in IE8) */
  border-top-color: rgba(255, 255, 255, .5);
}
.sf-arrows.sf-navbar ul > li > .sf-with-ul:focus:after,
.sf-arrows.sf-navbar ul > li:hover > .sf-with-ul:after,
.sf-arrows.sf-navbar ul > .sfHover > .sf-with-ul:after {
  border-color: transparent;
  border-top-color: white;
}
<html>

<head>
  <link rel="stylesheet" href="css/superfish.css">
  <link rel="stylesheet" href="css/superfish-navbar.css">

</head>

<body>
  <ul class="sf-menu sf-navbar">
    <li>
      <a class="" href="">News<span class="caret"></span></a>
      <ul class="">
        <li><a href="">Add New</a>
        </li>
        <li><a href="">Overview</a>
        </li>
      </ul>
    </li>
    <li>
      <a class="" href="">Products<span class="caret"></span></a>
      <ul class="">
        <li><a href="">New Product</a>
        </li>
      </ul>
    </li>

  </ul>

  <script src="hoverIntent.js"></script>
  <script src="superfish.js"></script>
  <script src=".1.3/jquery.min.js"></script>
  <!-- initialise Superfish -->
  <script>
    jQuery(document).ready(function() {
      jQuery('ul.sf-menu').superfish({
        pathClass: 'current',
        delay: 1800000
      });
    });
  </script>
</body>

</html>

I have seen jQuery SuperFish Error: jQuery(“ul.sf-menu”).superfish is not a function and this TypeError: jQuery(…).superfish is not a function post, I tried the suggestion given in ments and answers, but none worked for me.

I simply want the submenu to appear with a delay on mouse hover. I spend so much time but could not figure out the reason.

I am using superfish to add delay in the appearance of sub-menus. But its not working and in Mozilla-Firebug I get the error mentioned in title of question.

Here is the html code and snippet:

/*** ESSENTIAL STYLES ***/

.sf-menu,
.sf-menu * {
  margin: 0;
  padding: 0;
  list-style: none;
}
.sf-menu li {
  position: relative;
}
.sf-menu ul {
  position: absolute;
  display: none;
  top: 100%;
  left: 0;
  z-index: 99;
}
.sf-menu > li {
  float: left;
}
.sf-menu li:hover > ul,
.sf-menu li.sfHover > ul {
  display: block;
}
.sf-menu a {
  display: block;
  position: relative;
}
.sf-menu ul ul {
  top: 0;
  left: 100%;
}
/*** DEMO SKIN ***/

.sf-menu {
  float: left;
  margin-bottom: 1em;
}
.sf-menu ul {
  box-shadow: 2px 2px 6px rgba(0, 0, 0, .2);
  min-width: 12em;
  /* allow long menu items to determine submenu width */
  *width: 12em;
  /* no auto sub width for IE7, see white-space ment below */
}
.sf-menu a {
  border-left: 1px solid #fff;
  border-top: 1px solid #dFeEFF;
  /* fallback colour must use full shorthand */
  border-top: 1px solid rgba(255, 255, 255, .5);
  padding: .75em 1em;
  text-decoration: none;
  zoom: 1;
  /* IE7 */
}
.sf-menu a {
  color: #13a;
}
.sf-menu li {
  background: #BDD2FF;
  white-space: nowrap;
  /* no need for Supersubs plugin */
  *white-space: normal;
  /* ...unless you support IE7 (let it wrap) */
  -webkit-transition: background .2s;
  transition: background .2s;
}
.sf-menu ul li {
  background: #AABDE6;
}
.sf-menu ul ul li {
  background: #9AAEDB;
}
.sf-menu li:hover,
.sf-menu li.sfHover {
  background: #CFDEFF;
  /* only transition out, not in */
  -webkit-transition: none;
  transition: none;
}
/*** arrows (for all except IE7) **/

.sf-arrows .sf-with-ul {
  padding-right: 2.5em;
  *padding-right: 1em;
  /* no CSS arrows for IE7 (lack pseudo-elements) */
}
/* styling for both css and generated arrows */

.sf-arrows .sf-with-ul:after {
  content: '';
  position: absolute;
  top: 50%;
  right: 1em;
  margin-top: -3px;
  height: 0;
  width: 0;
  /* order of following 3 rules important for fallbacks to work */
  border: 5px solid transparent;
  border-top-color: #dFeEFF;
  /* edit this to suit design (no rgba in IE8) */
  border-top-color: rgba(255, 255, 255, .5);
}
.sf-arrows > li > .sf-with-ul:focus:after,
.sf-arrows > li:hover > .sf-with-ul:after,
.sf-arrows > .sfHover > .sf-with-ul:after {
  border-top-color: white;
  /* IE8 fallback colour */
}
/* styling for right-facing arrows */

.sf-arrows ul .sf-with-ul:after {
  margin-top: -5px;
  margin-right: -3px;
  border-color: transparent;
  border-left-color: #dFeEFF;
  /* edit this to suit design (no rgba in IE8) */
  border-left-color: rgba(255, 255, 255, .5);
}
.sf-arrows ul li > .sf-with-ul:focus:after,
.sf-arrows ul li:hover > .sf-with-ul:after,
.sf-arrows ul .sfHover > .sf-with-ul:after {
  border-left-color: white;
}
/*** adding the class sf-navbar in addition to sf-menu creates an all-horizontal nav-bar menu ***/

.sf-navbar {
  background: #BDD2FF;
  position: relative;
  margin-bottom: 5em;
}
/* provide background colour for submenu strip */

/* you should just set the menu's container bg colour rather than use pseudo-elements */

.sf-navbar:before {
  content: '';
  position: absolute;
  left: 0;
  z-index: -1;
  background-color: #BDD2FF;
  height: 200%;
  width: 100%;
}
.sf-navbar ul {
  box-shadow: none;
}
.sf-navbar li {
  background: #AABDE6;
  position: static;
}
.sf-navbar > li > a,
.sf-navbar > li > ul > li > a {
  border: none;
}
.sf-navbar > li > ul {
  min-width: 36em;
  /* set this to whatever suits your design */
}
.sf-navbar ul li {
  background: #BDD2FF;
  position: relative;
}
.sf-navbar ul ul {
  left: 0;
  top: 100%;
}
.sf-navbar ul ul li {
  width: 100%;
}
.sf-navbar > li > ul > li {
  float: left;
}
.sf-navbar li.current {
  background: #BDD2FF;
}
.sf-navbar li:hover,
.sf-navbar li.sfHover,
.sf-navbar ul li.current {
  background: #BDD2FF;
}
.sf-navbar ul li:hover,
.sf-navbar ul li.sfHover,
.sf-navbar ul ul li {
  background: #D1DFFF;
}
.sf-navbar ul ul li:hover,
.sf-navbar ul ul li.sfHover,
.sf-navbar ul ul li.current {
  background: #E6EEFF;
}
.sf-navbar ul li.current > a {
  font-weight: bold;
}
/*** point all arrows down ***/

.sf-arrows.sf-navbar ul .sf-with-ul:after {
  margin-top: -3px;
  margin-right: 0;
  border-color: transparent;
  border-top-color: #dFeEFF;
  /* edit this to suit design (no rgba in IE8) */
  border-top-color: rgba(255, 255, 255, .5);
}
.sf-arrows.sf-navbar ul > li > .sf-with-ul:focus:after,
.sf-arrows.sf-navbar ul > li:hover > .sf-with-ul:after,
.sf-arrows.sf-navbar ul > .sfHover > .sf-with-ul:after {
  border-color: transparent;
  border-top-color: white;
}
<html>

<head>
  <link rel="stylesheet" href="css/superfish.css">
  <link rel="stylesheet" href="css/superfish-navbar.css">

</head>

<body>
  <ul class="sf-menu sf-navbar">
    <li>
      <a class="" href="">News<span class="caret"></span></a>
      <ul class="">
        <li><a href="">Add New</a>
        </li>
        <li><a href="">Overview</a>
        </li>
      </ul>
    </li>
    <li>
      <a class="" href="">Products<span class="caret"></span></a>
      <ul class="">
        <li><a href="">New Product</a>
        </li>
      </ul>
    </li>

  </ul>

  <script src="hoverIntent.js"></script>
  <script src="superfish.js"></script>
  <script src="https://ajax.googleapis./ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <!-- initialise Superfish -->
  <script>
    jQuery(document).ready(function() {
      jQuery('ul.sf-menu').superfish({
        pathClass: 'current',
        delay: 1800000
      });
    });
  </script>
</body>

</html>

Share Improve this question edited May 23, 2017 at 12:28 CommunityBot 11 silver badge asked Mar 2, 2015 at 20:35 KamranKamran 4,10014 gold badges65 silver badges118 bronze badges 3
  • 1 Do you see errors in the console when your page loads? The error means that the "superfish" plugin did not initialize itself correctly. – Pointy Commented Mar 2, 2015 at 20:36
  • 3 Does superfish depend on jQuery? Perhaps load it below the jquery script? – Tom Commented Mar 2, 2015 at 20:38
  • @Tom well that's a good observation :) Yes, if the code intends to add itself as a jQuery method, it'll have to e after the import of jQuery. – Pointy Commented Mar 2, 2015 at 20:38
Add a ment  | 

1 Answer 1

Reset to default 4

You are loading superfish.js before you load jquery.min.js -- superfish depends on jquery

Change your script to:

...
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="superfish.js"></script>
...

Working plnkr

发布评论

评论列表(0)

  1. 暂无评论