0

私は、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) {

しかし同じ結果。

失敗していると言ったら編集してください。ボタンが単に応答しないということです。コンソールエラーはなく、クリック可能なボタンではないように動作します。

4

2 に答える 2

0

私は答えを見つけました。変化

$('#results').on('click',".profile", function(e) {

$('#results').on('vclick',".profile", function(e) {

モバイルで解決しました。

于 2012-06-08T18:54:15.727 に答える
0

あなたは onclick 関数を使ってみることができます..

$('#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) {
            var param = "'"+ user.uid +"'";
             $('#results').append('<li><a href="#" class="profile" onclick="testFunction('+ param +')">' + 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();
 }

});

テスト関数では、

function testFunction(userID){

   var user = users[ userID ];

   $('#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();
}
于 2012-06-09T05:53:48.687 に答える