3

私はphpページを持っています.jsファイルへの外部リンクが頭にあり、本体にはjqueryから選択可能な要素がいくつかあります(ユーザーがログインしている場合に要素が生成されるため、それらがない場合もあります)。問題は私が書いた JavaScript にあり、次のエラーが発生します: TypeError: Object [object Object] has no method 'disableSelection'. PHPに「.sortable」要素を入れても、このエラーが発生します。html では問題がないように見え、正常に動作します。エラーが発生するコードは次のとおりです。

私の英語でごめんなさい。ご希望であればホールコードも入れますが、大きすぎます。問題は、javascriptの読み込みが速すぎるか、htmlが生成される前にあるためだと思います(jsに変数を入れようとし、その関数をif()の下に配置しようとしましたが、機能していません)

javascript(scripturi.js):

 var logat=0;

$(document).ready(function() {

    $( ".sortable0" ).sortable();
    $( ".sortable0" ).disableSelection();

    $( ".sortableIt" ).disableSelection();
    $( ".sortableIt" ).sortable(
    {
        stop: function(event, ui) 
        {
            for(var i=0;i<ui.item.parent().children().length;i++)
            {
                 var x =ui.item.parent().children()[i].id;
                 //update items din acest sertar
                //updateItemServer(x,i)
                //alert(x+ " " + i);   
            }       
        }
    });

    $( ".sortable" ).disableSelection();
    $( ".sortable" ).sortable({ stop: function(event, ui) {reparaZindex();}});

});


function updateItemServer(x,i){
//alert(x+" "+i);

}

 function incarca(){
    $(document).ready(function (){
            $.getJSON("http://students.info.uaic.ro/~calin.chifan/api/compartiment/list.json", function(data){ 
                var html = [];
                /* loop through array */
                $.each(data, function(index, d){   
                    addCompartiment(d.nume_comp,d.id);
                });
            }).error(function(jqXHR, textStatus, errorThrown){ /* assign handler */
                alert("error occurred!");
            });
    });
}

function addCompartiment(nume,id){
     $("#sortable0").append('<ul class="sortable" id'+ +'>');
}


 function updateIndexServer(x,y){
 //alert(x+" "+y);
 //trimite id-ul x si pozitia y
 }

function reparaZindex(){
    $.each($(".sortable > li"), function() 
    {
        if($(this).find('.sertar')[0])
        {
            $(this).find('.sertar').eq(0).css('z-index',(500-$(this).index()*2));
            updateIndexServer($(this).find('.sertar')[0].id,$(this).index())
        }

        if($(this).find('.sortableIt')[0])
            $(this).find('.sortableIt').eq(0).css('z-index',(501-2*$(this).index()));               
    }); 
} 

window.onload = function() {
    //incarca();
    //reparaZindex();
}

HTMLでこの問題がないのは奇妙です。ユーザーがログインした後、いくつかの ul (.selectable) 要素を追加する関数を呼び出したいのですが、これまでのところ、いくつかの要素があることに気付くことさえできません。もしよろしければ、私が働いているページへのリンクを提供できます。

少しのphp:

    <?php
    ini_set('session.save_path', '/tmp/');
    session_start();

        $logged=0;
        if(isset($_SESSION['autentificat']))
        {
            if($_SESSION['autentificat']==1)  
            $logged=1;
        }
      $user= $_COOKIE['user'];
    echo'
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <!DOCTYPE html>
    <html>
    <head>
    <title>Proiect Web</title>

      <meta charset="utf8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>jQuery Dropdown Login Freebie | The Finished Box</title>
       <link rel="stylesheet" type="text/css" href="main.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <script src="login.js"></script>
            <script src="scripturi.js"></script>
            <script src="dulap.js"></script>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script>
            <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>


            <script src="login.js"></script>
            </head>'
            ;

      if($logged==1)
      {
        echo'<body onload="loadYeslog()">';



      }  
  else {
    echo'<body onload="loadNoLog()">';
  }

echo
    '<div class="mainbar">

                <div id="loginContainer">
                <div id="loginButton"><span style="display:block;width:48px;height:27px; ">Login</span></div>
                <div id="logoutButton" class="barbutton" style"cursor:pointer;"><span>Logout</span></div>';



      if($logged==0) 
      {
        echo'<div id="welcomeLabel" class="barbutton"><span>Not Logged in!</span></div>';
      }
      else
      {
        echo '<div id="welcomeLabel" class="barbutton"><span>Welcome '.$user.' !</span></div>';

      }

echo '<div style="clear:both"></div>
                <div id="loginBox">                 
                    <form id="loginForm" action="autentificare2.php" method="POST">
                        <fieldset id="body">
                            <fieldset>
                                <label for="username">
                  Username</label>
                                <input type="text" name="user"/>
                            </fieldset>
                            <fieldset>
                                <label for="password">Password</label>
                                <input type="password" name="password"/>
                            </fieldset>
                            <input type="submit" id="login" value="Sign in" />

                            <label for="checkbox"><input type="checkbox" id="checkbox" />Remember me</label>
                        </fieldset>
                        <span><a href="recovery.php" style="color: white;">Forgot your password?</a></span>
                         <div id="regbut"><span>New user ? </span></div>
                    </form>
                </div>
                <div id="regbox">
                           <form id="registerform" action="register.php" method="POST">
                            <table style="margin-top:10px;">

                                <label for="Dusername">
                                  REGISTAR FOARM!!! </label>


                                <tr>
                                   <td>
                                   <label for="Dusername">
                                   Username: </label>
                                   </td>
                                   <td>';
                                   ?>

                                   <input type="text" name="Duser"   placeholder="Introduceti numele de cont dorit" onblur="javascript:semnaleazaExistaNume (this.value, '')"  />
                                   </td>
                                   <td>
                                   <span class="ascuns" id="eroareNume">Numele deja exista, alegeti altul... </span>
                                   </td>
                                </tr>


                                <tr>
                                  <td>
                                  <label for="Dpassword">
                                  Password: </label>
                                  </td>
                                  <td>
                                 <input type="password" name="Dpassword"/>
                                 </td>
                                 </tr>

                                <tr>
                                <td>
                                   <label for="Demail">
                                  E-Mail: </label>
                                  </td>
                                  <td>
                                 <input type="text" name="Demail"/>
                                 </td>
                                 </tr>

                                <tr>
                                    <td>
                                 <input type="submit" id="register" value="Register" />
                                  </td>
                                 </tr>
                             </fieldset> 
                            </table>
                            </form>
                </div>
            </div>   
    </div>
  <div class="box">
    <ul class="sortable0" id="sortable0">
        <ul class="sortable" id="sortableColona1">
        <li id="sertar1" style="z-index:10"> 
            <img id="sertar11" class="sertar" ONCLICK="openS(this)" style="position: relative;z-index:500;aligh:center;" src="img/sertar1.png">
            <ul id="ui items1" style="z-index:501;position:relative;visibility:hidden;" class="sortableIt" >
              <li id="item1" class="ui-state-default">1</li>
              <li id="item2" class="ui-state-default">2</li>
              <li id="item3" class="ui-state-default">3</li>
              <li id="item4" class="ui-state-default">4</li>
              <li id="item5" class="ui-state-default">5</li>
              <li id="item6" class="ui-state-default">6</li>
              <li id="item7" class="ui-state-default">7</li>
              <li id="item8" class="ui-state-default">8</li>
              <li id="item9" class="ui-state-default">9</li>
              <li id="item10" class="ui-state-default">10</li>
              <li id="item11" class="ui-state-default">11</li>
              <li id="item12" class="ui-state-default">12</li>
            </ul>
        </li>

    </ul>
  </div>
</body>
</html>
4

3 に答える 3

1

jQuery コードを $(document).ready(); に配置する必要があります。次のようにページがロードされたときにのみ実行されます。

$(document).ready(function() {
    // your code here
});

これにより、ページとすべての DOM 要素が完全に読み込まれたときにのみ実行されるようになります。

アップデート:

関連するメソッド呼び出しを行うには jQuery UI が必要なため、HTML の head セクションに次のコードを追加できますか。

<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>

jQuery をロードした後に必ずインクルードしてください。ヘッド セクションのコードは次のようになります。

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="login.js"></script>
<script src="scripturi.js"></script>
<script src="dulap.js"></script>
<script src="login.js"></script>

まず、呼び出しているメソッドがその API に属しているため、jQueryUI がロードされていることを確認します。そこから物事を進めることができます!

于 2013-06-01T13:13:16.393 に答える
0

あなたのコードには jquery ui がどこにも含まれていません! JQuery UI 部分ではなく、JQuery を含めるだけです。Sortable は jquery ui の一部です。http://jqueryui.com/sortable/で確認してください。正しくインクルードすれば、ページにセレクターに応答する要素があるかどうかに関係なく問題ありません。正しいライブラリが含まれていることを確認してください。

于 2013-06-01T13:30:31.040 に答える
0

jQueryUI を追加する必要があります。以下のコードを jquery セクションの後に追加してください。

<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
于 2013-06-01T13:30:48.680 に答える