2013-04-17 4 views
1

У меня есть на jquery click, который отправляет запрос ajax.отправить запрос ajax на клавиатуре ENTER

Нет форм.

Я бы хотел, чтобы клавиатура ENTER использовалась также для отправки ajax-запроса.

Я наделите из этих кнопок, это сбивает с толку меня, как я не могу просто сделать:

$('#myForm input:text').keypress(function (e) { 
    if (e.which == 13) { 
    $("#button1").click() 
    } 
}); 

Мой currect на события щелчка выглядит следующим образом (как я продлить это для размещения ENTER?)

//Check answer 
$("body").on("click", ".unlocked figcaption .check", function(){ 
    var logo_id = $(this).parent().attr("id"); 
    var answer = $("#" + logo_id + " input[name=guesslogo]"); 
    var logo_lang = answer.attr("data-lang"); 

    answer.removeAttr("class").attr("disabled","true"); 

     //Submit answer for review 
     $.ajax({ 
      url: "actions.php", 
      get: "GET", 
      data: "answer=" + answer.val() + "&logo_id=" + logo_id + "&logo_lang=" + logo_lang, 
      cache: false, 
      success: function (data){ 
       var response = jQuery.parseJSON(data); 
       if (response.result == 1) { 
        answer.addClass("correct").siblings(".clear, .hint").fadeTo("slow","0.4"); 
        answer.parent().append('<div class="alert"><h3>Correct!</h3> <p>Score: '+ response.score +'</p></div>'); 
        $("#" + logo_id).siblings(".logo").removeClass("logo").addClass("answered").removeAttr("style"); 
        snd_correct.play(); 
         //update user_score and user_level values in leaderboard and header widgets 
         var this_user = $("header aside").attr("data-usern"); 
         if (this_user) { 
          var this_user_score = $("header aside .user_score").text(); 
          var this_user_level = $("header aside .user_level").text(); 
           $("[data-usern="+ this_user +"] .user_score").empty().append(parseInt(this_user_score) + parseInt(response.score)); 
           if (response.level_up == 1) { 
            var new_level = parseInt(this_user_level) +1; 
            $("[data-usern="+ this_user +"] .user_level").empty().append(new_level); 
            update_view(new_level); 
           } 
          // 
          update_level_progress_bar(); 
         } 
       } else if (response.result == 0) { 
        answer.addClass("wrong").removeAttr("disabled"); 
        snd_wrong.play(); 
       } else if (response.result == 2) { 
        answer.addClass("almost").removeAttr("disabled"); 
        snd_wrong.play(); 
       } 
      } 
     }); 

    return false; 
}); 

Я загрузил здесь образец: http://gamoicani.es/logo/ нажмите на любой логотип, я бы хотел использовать клавиатуру ENTER для отправки.

+0

Почему вы не можете сделать '$ ('# myForm input: text'). Keypress'? Все ли они не текстовые входы? Есть ли обработчик события щелчка для '# button1'? – Danny

+0

Это, безусловно, звучит как нечто, что нужно использовать для функции .keypress ... Возможно, вам нужно добавить 'e.preventDefault();' в вашу функцию нажатия клавиши перед вызовом 'button.click()'. –

+0

что будет '$ (this) .parent()' return –

ответ

2

Вы можете сделать функцию АЯКС внешнего, а затем вызвать его на щелчок и нажатие клавиши (ввод) события, как это:

$(document).on("click", ".unlocked figcaption .check", ajaxFunction); 
$(document).on("keypress", "#myForm input:text", function (e) { 
    if (e.keyCode == 13){ 
     e.preventDefault(); 
     ajaxFunction(); 
    } 
}); 

function ajaxFunction(){ 
    var logo_id = $(this).parent().attr("id"); 
    var answer = $("#" + logo_id + " input[name=guesslogo]"); 
    var logo_lang = answer.attr("data-lang"); 

    answer.removeAttr("class").attr("disabled","true"); 

     //Submit answer for review 
     $.ajax({ 
      url: "actions.php", 
      get: "GET", 
      data: "answer=" + answer.val() + "&logo_id=" + logo_id + "&logo_lang=" + logo_lang, 
      cache: false, 
      success: function (data){ 
       var response = jQuery.parseJSON(data); 
       if (response.result == 1) { 
        answer.addClass("correct").siblings(".clear, .hint").fadeTo("slow","0.4"); 
        answer.parent().append('<div class="alert"><h3>Correct!</h3> <p>Score: '+ response.score +'</p></div>'); 
        $("#" + logo_id).siblings(".logo").removeClass("logo").addClass("answered").removeAttr("style"); 
        snd_correct.play(); 
         //update user_score and user_level values in leaderboard and header widgets 
         var this_user = $("header aside").attr("data-usern"); 
         if (this_user) { 
          var this_user_score = $("header aside .user_score").text(); 
          var this_user_level = $("header aside .user_level").text(); 
           $("[data-usern="+ this_user +"] .user_score").empty().append(parseInt(this_user_score) + parseInt(response.score)); 
           if (response.level_up == 1) { 
            var new_level = parseInt(this_user_level) +1; 
            $("[data-usern="+ this_user +"] .user_level").empty().append(new_level); 
            update_view(new_level); 
           } 
          // 
          update_level_progress_bar(); 
         } 
       } else if (response.result == 0) { 
        answer.addClass("wrong").removeAttr("disabled"); 
        snd_wrong.play(); 
       } else if (response.result == 2) { 
        answer.addClass("almost").removeAttr("disabled"); 
        snd_wrong.play(); 
       } 
      } 
     }); 

    return false; 
}; 

jsfiddle

+0

Может кто-нибудь объяснить, почему: $ («body»). On («keypress», «input: text [name = guesslogo]», function() { \t console.dir (this); }); срабатывает только при первом вводе? Последующие события не волнуют ... – 2013-04-17 13:54:02

+0

все работает отлично для меня: http://jsfiddle.net/arcm111/8M6YH/! ваш js-код загружен в раздел головы или тела? – razzak

3

// Попробуйте это !! :)

$(document).ready(function(){ 
    $(this).on('keypress click','.unlocked figcaption .check',function(e){ 
    if((e.type === 'keypress' && e.keyCode === 13) || e.type === 'click') 
    { 
     // All your code inside the .on() 
    } 
    }); 
}); 
+0

Можете ли вы мне объяснить, $ («body»). On («keypress», «input: text [name = guesslogo]», function() { \t console.dir (this); }); почему это срабатывает только при первом вводе? Остальное все равно? – 2013-04-17 13:54:20

+0

Я бы лично не использовал $ ('body'). On ("keypress", "input blah Я бы выбрал селектор для ввода: $ ('input: text [name = blah]'). bind ('keypress', function() { ajaxFunction(); – cjonasw

+0

, а затем событие для щелчка. Просто попытайтесь понять свой вопрос немного больше. Почему вы используете $ .on() из интереса? Я склонен чаще использовать привязки из-за нескольких событий, запускающих разные коды, а затем выделяя различия простой проверкой текущего типа события. Разделение событий/обработчиков/логических данных - хорошая привычка входить так же, как и на rassak. Я обычно использую jQuery, как предполагалось, хотя я действительно разделяю, если кодирую i n raw js – cjonasw

Смежные вопросы