【问题标题】:jQuery not even being calledjQuery 甚至没有被调用
【发布时间】:2010-10-04 17:26:00
【问题描述】:

我不知道这里发生了什么..我正在尝试在我的菜单上添加一个滑动切换..看起来很简单..我试图简化它以尝试找到问题(意味着我已经取出所有链接和额外的 jquery,只有那个底部示例 - 最后的段落)但我不知道错误是什么..(其他它没有做任何事情)

包括:

<script type="text/javascript" src="/raceday/Scripts/jquery-1.4.2.min.js"></script> 

脚本:

<script type="text/javascript">
$("button").click(function() {
    $("p").slideToggle("slow");
});    

HTML:

<div class="ttl-area">
   <h2 class="ttl-account"><span>Account</span></h2>
</div>
<div class="account-area">
   <div class="login-holder">

      <p><strong>Welcome, <%= ViewModel.Profile.Name.First %></strong></p>

      <ul class="account-links">
         <span id="loginTitle">User Options</span><br /><br />
         <li>
            <%= Html.ActionLink<EventController>( x => x.List(), "All Events" )%>
         </li>
         <li>
            <%= Html.ActionLink<MyEventsController>( x => x.List(), "My Events" )%>
         </li>
         <li>
            <%= Html.ActionLink<AccountController>( x => x.Edit(), "My Profile" )%>
         </li>
         <li>
            <%= Html.ActionLink<ClubController>( x => x.List(), "All Clubs" )%>
         </li>
         <li>
            <%= Html.ActionLink<MyClubsController>( x => x.List(), "My Clubs" )%>
         </li>
         <li>
            <%= Html.ActionLink<AccountController>( x => x.ChangePassword(), "Change My Password" )%>
         </li>
         <li>
            <%= Html.ActionLink<DependantController>( x => x.List(), "My Dependants" ) %>
         </li>

      </ul>
   </div>
  <% if ( ViewModel.Profile.HasOrganizerInfo ) { %>
  <div class="login-holder">
     <ul class="account-links">
        <span id="loginTitle">Organizer Details</span><br /><br />
        <li>
           <%= Html.ActionLink<AccountController>( x => x.Organizer(), "Organizer Details" )%>
        </li>
        <li>
           <%= Html.ActionLink<EventController>( x => x.Edit( default(int?) ), "Post An Event" )%>
        </li>
        <li>
           <%= Html.ActionLink<EventAdminController>( x => x.List(), "Events Created By Me" ) %>
        </li>
        <li>
           <%= Html.ActionLink<ClubController>( x => x.Edit( default( int? ) ), "Create A Club" )%>
        </li>
        <li>
           <%= Html.ActionLink<ClubAdminController>( x => x.List( ), "Clubs Created By Me" )%>
        </li>
         <!-- if ( ViewModel.Profile.IsAdministrator ) { -->
         <li>
            <%= Html.ActionLink<EventReportController>( x => x.List(), "Event Report" ) %>
         </li>
         <!-- } -->
     </ul>
  </div>
  <% } %>
  <% if ( ViewModel.Profile.HasTimerInfo ) { %>
  <div class="login-holder">
     <ul class="account-links">
        <span id="loginTitle">Timer Details</span><br /><br />
        <li>
           <%= Html.ActionLink<AccountController>( x => x.Timer(), "Timer Details" )%>
        </li>
        <li>
           <%= Html.ActionLink<EventTimerController>( x => x.List(), "Events Timed By Me" ) %>
        </li>
     </ul>
  </div>
  <% } %>
      <ul class="account-links">
      <% if ( ( !ViewModel.Profile.HasOrganizerInfo ) || ( !ViewModel.Profile.HasTimerInfo) ) { %>   
         <span id="loginTitle">Additional Options</span><br /><br />
      <% } %>         
         <% if ( !ViewModel.Profile.HasTimerInfo ) { %>
            <li>
               <%= Html.ActionLink<AccountController>( x => x.Timer(), "I Time Events" )%>
            </li>
         <% } %>

         <% if ( !ViewModel.Profile.HasOrganizerInfo ) { %>
            <li>
               <%= Html.ActionLink<AccountController>( x => x.Organizer(), "I Organize Events" )%>

            </li>
         <% } %>

            <li><%= Html.ActionLink<AccountController>( x => x.Logout(), "Log Out" ) %></li>
      </ul>

</div>
        <button>Hide 'em</button>

  <p>Hiya</p>
  <p>Such interesting text, eh?</p>

【问题讨论】:

  • 显示实际按钮后是否调用了绑定?如果没有,请将其包装在 $(document).ready(function(){...} 中或使用 live 而不是 bind

标签: jquery slidetoggle


【解决方案1】:

您的代码需要在document.ready 处理程序中,以便$("button") 选择器找到将click 处理程序绑定到的元素。

$(function() {
  $("button").click(function() {
    $("p").slideToggle("slow");
  });   
});

如果 DOM 还没有准备好,&lt;button&gt; 元素可能还没有添加/准备好,这意味着 $("button") 仍然会绑定到它找到的所有元素...但是 它不会找到他们,导致完全没有行为,这就是你所看到的。

【讨论】:

  • 非常有帮助!我敢再去一个吗? a) 我想要每个标题的脚本,但我不想有 20 个不同的函数来滑动切换
  • @Kevin - 在这种情况下,您可以相对地找到元素,假设每个元素都在 &lt;div class="login-holder"&gt; 旁边,那么您可能会使用 $(this).siblings(".login-holder").slideToggle(); 而不是 $("&lt;p&gt;"),这有意义吗?
  • 是的,但这与
    并不能很好地配合 .. 点击一个会关闭另一个 ..
  • @Kevin - Doh,你的结构有点不同,你可能想要.next(".logic-holder") 而不是兄弟姐妹......这取决于你放置 +/- 元素的位置。
  • 应该是.next吗?
【解决方案2】:

你需要给它包装一个加载方法:

$(document).load(function(){
    $("button").click(function() {
        $("p").slideToggle("slow");
    });
})

【讨论】:

  • 我确实有那个..仍然没有骰子
  • $(document).load(func... 不起作用。您可以使用$(document).ready(func...(或其快捷方式,请参阅尼克的回答),或者如果您希望所有元素都完全加载,则可以使用$(window).load(func...
  • @patrick - .load() 很好地捕捉到了这一点。
【解决方案3】:

试过这样的吗?

jQ = jQuery.noconflict();

jQ("button").click(function() {
    jQ("p").slideToggle("slow");
});    

也许 asp 弄乱了你的 $

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签