私は、AJAX呼び出しを介してサーバーと対話し、返された値に基づいてリストビューを更新する、比較的単純なjQueryモバイルサイトを開発しています。動的更新は正常に機能しますが、click
イベントはモバイルブラウザーの動的リストアイテムにバインドされていないようです。(AndroidとiOSでも同じ結果になります)が、デスクトップ上のChrome、Firefox、Safariの両方で正常に動作します。
これが私のリストに入力するコードです(これはデスクトップとモバイルで機能します):
$('#searchfield').keypress(function(e) {
if( $(this).val().length > 3 ) {
$.getJSON('admin.php?request=search&srch_email=' + $(this).val(), function(data) {
if( data.status == 'success' ) {
$('#results').empty();
$.each(data.data, function(count,user) {
$('#results').append('<li><a href="#profile_' + user.uid + '" class="profile">' + user.first_name + ' ' + user.last_name + ' (' + user.email + ')</a></li>');
$('#results').listview('refresh');
users[user.uid] = user;
});
}
});
}
else if($(this).val().length == 0 ) {
$('#results').empty();
}
});
私が最初に試したイベントをバインドするには:
$('.profile').live('click', function(e) {
e.preventDefault();
var parts = $(this).attr('href').split("_");
var user = users[ parts[1] ];
$('#pheader').html('Edit User ' + user.email );
$('#fname').val(user.first_name);
$('#lname').val(user.last_name);
$('#zip').val(user.zipfirst);
$('#state').val(user.state);
$('.uid').val(user.uid);
$.mobile.changePage( $('#profile') );
$('#searchfield').val("");
$('#results').empty();
});
それはうまくいかなかったので.live()
、モバイルでは正しく機能しない可能性があり、.on
現在は推奨される方法であると読みました。上記の最初の行を次のように変更しました。
$('#results').on('click',".profile", function(e) {
しかし同じ結果。
失敗していると言ったら編集してください。ボタンが単に応答しないということです。コンソールエラーはなく、クリック可能なボタンではないように動作します。