Salah satu soalan mudah alih jQuery yang paling biasa ialah "Mengapa saya perlu meletakkan semua skrip ke index.html" . Sesetengah jawapan yang anda akan dapati di sana mengandungi lebih banyak bunyi daripada fakta. Soalan ini akan menerangkan kepada anda secara terperinci cara jQuery Mobile berfungsi dan mengapa skrip anda tidak akan berfungsi jika anda terlupa memasukkannya.
Untuk memahami perkara ini situasi anda perlu memahami bagaimana jQuery Mobile berfungsi. Ia menggunakan ajax untuk memuatkan halaman lain.
Halaman pertama dimuatkan seperti biasa. HEAD dan BODYnya dimuatkan ke dalam DOM dan mereka berada di sana untuk menunggu kandungan lain. Apabila halaman kedua dimuatkan, hanya kandungan BODYnya dimuatkan ke dalam DOM. Untuk lebih tepat, malah BADAN tidak dimuatkan sepenuhnya. Hanya div pertama dengan atribut data-role="page" akan dimuatkan, semua yang lain akan dibuang. Walaupun anda mempunyai lebih banyak halaman di dalam BODY hanya halaman pertama sahaja yang akan dimuatkan. Peraturan ini hanya terpakai pada halaman berikutnya, jika anda mempunyai lebih banyak halaman dalam HTML permulaan, kesemuanya akan dimuatkan.
Itulah sebabnya butang anda berjaya dipaparkan tetapi acara klik tidak berfungsi. Peristiwa klik yang sama yang induknya HEAD diabaikan semasa peralihan halaman.
Dalam halaman kedua anda dan setiap halaman lain, gerakkan SKRIP teg ke dalam kandungan BODY, seperti ini:
<body> <div data-role="page"> // And rest of your HTML content <script> // Your javascript will go here </script> </div> </body>
Tayangan halaman tidak dicetuskan selepas perubahan halaman
Contoh lain yang berfungsi:Halaman dimuatkan secara berbeza dengan jQuery-mobile peralihan
Penyelesaian 2Alihkan semua javascript anda ke dalam HTML pertama yang asal. Kumpulkan semuanya dan letakkan di dalam satu fail js, ke dalamHEAD. Mulakan ia selepas jQuery Mobile telah dimuatkan.
<head> <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script> <script src="index.js"></script> // Put your code into a new file </head>
rel="external" dalam butang anda dan setiap elemen yang anda gunakan untuk menukar halaman. Kerana itu ajax tidak akan digunakan untuk memuatkan halaman dan apl Mudah Alih jQuery anda akan berkelakuan seperti aplikasi web biasa. Malangnya ini bukan penyelesaian yang baik dalam kes anda. Phonegap tidak boleh berfungsi sebagai apl web biasa.
<a href="#second" class="ui-btn-right" rel="external">Next</a>
Memaut tanpa Ajax
Penyelesaian realistik Penyelesaian realistik akan menggunakanPenyelesaian 2. Tetapi tidak seperti penyelesaian 2, saya akan menggunakan fail index.js yang sama dan memulakannya di dalam HEAD setiap halaman lain yang mungkin.
Sekarang anda boleh bertanya kepada sayaKENAPA ?
Phonegap seperti jQuery Mobile adalah buggy, dan lambat laun akan berlaku ralat dan apl anda akan gagal (termasuk DOM yang dimuatkan) jika setiap kandungan js anda berada di dalam satu fail HTML. DOM boleh dipadamkan dan Phonegap akan memuatkan semula halaman semasa anda. Jika halaman itu tidak mempunyai javascript, ia tidak akan berfungsi sehingga ia dimulakan semula.
Atas ialah kandungan terperinci Mengapa Skrip Mudah Alih jQuery Saya Hanya Berfungsi pada Halaman Pertama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!