1

私はこれを私の見解に持っています

<script type='text/javascript'>
$(function(){       
    $('#users').click(function(){
        alert($("tr[aria-selected=true] td:first").html())                      
    })
})
</script>

そして私のusers.jsの中で

$(function(){       
    $('#users').click(function(){
        alert($("tr[aria-selected=true] td:first").html())                      
    })
})

それらを持っていると、明らかに同時にではなく、異なる結果が得られます。基本的に、選択した行の ID を取得して属性値を見つけようとしています。\

ページを読み込んだ直後の控えめな方法では、行の最初のクリックで「null」になり、行にヒットするたびに、以前にクリックした値が表示されます... 2回!. しかし、スクリプトをビュー内に保持すると、必要な結果が得られます。

私は何を間違っていますか?

編集:

私の見解

<%=raw jqgrid("List of users", "users", "/users", 
 [    
   { :field => "id", :label => "id",:width => 50 },    
   { :field => "username", :label => "username",:width => 120,:editable => true },    
   { :field => "email", :label => "email",:width => 120,:editable => true },    
   { :field => "name", :label => "name",:width => 100,:editable => true },    
   { :field => "lastname", :label => "lastname",:width => 100,:editable => true },
   { :field => "groups", :label => "roles",:width => 180}   
 ] , {:add => true,:edit => true,:delete => true,:error_handler => "s",:inline_edit => 'true',:edit_url => post_data_users_url,:sortable_rows => 'true'}  
 ) %>
 <p><%= link_to "Edit roles",roles_path%>
 <%= link_to "| Edit user",{:action => 'edit'},{:class => 'editLink hide'}%></p>

 <script type='text/javascript'>
   $(function(){
       var _last = new String()     
       $('#users').click(function(){
           _last = $("tr[aria-selected=true] td:first").html()
           $(".editLink").attr("href","/users/edit/"+ _last)
           $(".editLink").addClass('show')
       })
   })
</script>

私のレイアウト

<!DOCTYPE html>
<html>
<head>
  <title>UserManager</title>
  <%= stylesheet_link_tag "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
  <%=jqgrid_javascripts%>
  <%=jqgrid_stylesheets%>
</head>
<body>
    <div>
        <%if flash[:notice]%>
            <p><%= flash[:notice]%></p>
        <%end%>
        <%if current_user%>
            Logged in as <%= current_user.username%> | <%= link_to 'logout', log_out_path%>
        <%end%>
    </div>
    <%= yield %>
 </body>
</html>

私が見た方法...そこには特別なものは何もありません

4

1 に答える 1

0

パフォーマンス要件に応じて、click(function(){}) の代わりに .live('click', function(){}) を使用するか、users.js 内に関数を作成してバインドを作成し、 jqgrid で実行します。

users.js 内

$(function(){       
    $('#users').live('click', function(){
        alert($("tr[aria-selected=true] td:first").html())                      
    })
})

または users.js で:

function bindClickToRow(){
   $(function(){       
     $('#users').click(function(){
        alert($("tr[aria-selected=true] td:first").html())                      
     })
   })
 }

次に、jqgrid のコールバックで使用します (API がどのように機能するかはわかりませんが、すぐにはわかりませんでしたが、優れたグリッド プラグインがこれをサポートしていると確信しているので、これを疑似コードと見なしてください):

jQuery('table').jqgrid({
  afterCreate: bindClickToRow
})

お役に立てれば。

私が見る限り、その理由は、「クリック」を使用してのクリックイベントを関数にバインドしているためです。しかし、実際のそれ自体がまだ存在しないときにそれを行っています。つまり、基本的にjQueryに、現在存在するすべての s に「クリック」をバインドするように指示しています。

ただし、「ライブ」を使用するとどうなるかは、セレクターに一致するすべての現在および将来の「クリック」イベントにその関数をバインドするよう jQuery に指示することと同じです。

まだ存在しない理由は、呼び出された bind の後に明らかに jqgrid がロードされるためです。また、jqgrid はおそらく、「クリック」バインドの呼び出し後、定期的に新しい を作成します。「ライブ」を使用すると、jQuery はすべての新しい を監視し、それらが作成されるとすぐにそれらにコールバック関数をバインドします。

于 2012-04-06T19:56:29.697 に答える