2014-10-11 4 views
0

Я пытаюсь проверить некоторые условия на клавише ввода. Для этой цели я написал код, но этот код выполняет и другие коды. Я попытался, но не нашел, почему проблема возникает. Как и у меня есть текстовое поле, и я загружаю данные на это с помощью поиска символа ajax, и теперь я пытаюсь добавить новое условие: если нажать клавишу ввода, проверьте поле и выполните некоторую работу. Но он проверяет и отправляет форму без нажатия кнопки отправки. Я смущен, почему это происходит. Ниже мой код:Js создает проблему при вводе ключевого события

jQuery(function(){ 
    jQuery("#name").keyup(function(event) 
    { 
     // this is code to check whether enter key is pressed or not 
     if(event.keyCode == 13){ 
      if(jQuery('#name').val()==''){ 
       alert("Please select Product name First.") 
       jQuery('#name').focus(); 
       jQuery('#name').css('border','1px solid red'); 
      }else{ 
       // jQuery('#checkpname').click(); 
       changetab('step2'); // I want to stop code after this 
      } 
     // this is code to check whether enter key is pressed or not 
     }else{ 
      var searchid = jQuery(this).val(); 
      var dataString = 'search='+ searchid; 
      if(searchid!='') 
      { 
       jQuery.ajax({ 
        type: "POST", 
        url: '<?php echo Mage::helper('core/url')->getHomeUrl();?>pmembers/packages/searchproducts/key/e0603b30a8d5802f6df3jhyd87f31ddb/', 
        data: dataString, 
        cache: false, 
        success: function(html) { 
         jQuery("#result").html(html).show(); 
        } 
       }); 
      } 
     } 
    }); 
    //jQuery('body').on('click', '#result',function(e){ 
    jQuery("#result").live("click",function(e){ 
     var $clicked = jQuery(e.target); 
     // var $name = $clicked.find('.name').html(); 
     //var decoded = jQuery("<div>").html($name).text(); 
     jQuery('#name').val(jQuery(e.target).text()); 
    }); 
    jQuery(document).on("click", function(e) { 
     var $clicked = jQuery(e.target); 
     if (! $clicked.hasClass("search")){ 
      jQuery("#result").fadeOut(); 
     } 
    }); 
    jQuery('#name').click(function(){ 
     jQuery("#result").fadeIn(); 
    }); 
}); 

Это функция changetab:

function changetab(hrf){ 
    jQuery('a.btn').each(function() { 
    jQuery(this).click(function() { 
     //var thisid = $('#sell .tab-pane.active').attr('id'); 
     jQuery('.wizard a[data-toggle="tab"]').removeClass('current'); 
     jQuery('.wizard a[href="#'+hrf+'"]').click(); 
    }); 
    }); 
} 

Эта функция в основном изменить вкладки. Я только хочу проверить текстовое поле с enter, если не пусто, а затем загрузить вторую вкладку. функция вкладки отлично работает в других условиях, только введите создающую проблему. Надеюсь, кто-нибудь поймет, что я пытаюсь сказать. Заранее спасибо

+0

Вы должны блокировать 'else' следующие друг за другом. Зачем? –

+0

@Javad_Amiry, если вы видите его в моем коде, есть два условия: один для события нажатия клавиши ввода и один для пустого текстового поля. Оба разные – Adda

+0

Вам действительно нужно работать с форматированием кода;) –

ответ

0

Прежде всего, вы должны обрабатывать событие ключа. Но это не так. попробуйте:

if(event.keyCode == 13){ 
    event.preventDefault(); 
    if(jQuery('#name').val()==''){ 
     alert("Please select Product name First.") 
     jQuery('#name').focus(); 
     jQuery('#name').css('border','1px solid red'); 
    }else{ 
     // jQuery('#checkpname').click(); 
     changetab('step2'); // I want to stop code after this 
    } 
    // I always return a false and never trust preventDefault 
    return false; 
// this is code to check whether enter key is pressed or not 
}else{ /* rest of code */ 

И: как я помню, вы можете обрабатывать события ключа на keydown событие, а не keyup. Так что попробуй. Он должен работать.

jQuery("#name").keydown(function(event){ /* rest of your code... */ 
0

Попробуйте добавить event.preventDefault() в свою функцию keycheck, которая предотвращает ее фактическую функциональность и делает то, что вы говорите.

Try event.stopPropagation() вместо и дайте мне знать

ОБНОВЛЕНО

if(event.keyCode == 13){ 
    event.stopPropagation(); 
    if(jQuery('#name').val()==''){ 
    alert("Please select Product name First.") 
    jQuery('#name').focus(); 
    jQuery('#name').css('border','1px solid red'); 

    }else{ 

    // jQuery('#checkpname').click(); 
    changetab('step2'); // I want to stop code after this 
     return false; 
    } 

Добавить везде, где вам нужно. Проверьте ссылку ниже для его правильной работы

PreventDefault

+0

Спасибо за ответ. Код создает проблему на другом условие не здесь, где вы упомянули. Например, я нажал enter и текстовое поле не пусто. Однако я тестирую ваш код. – Adda

+0

Он все еще отправляет страницу на ключ ввода. Я хочу остановить выполнение после того, как в конце условия ключа ввода. Упование вы получили мою мысль. – Adda

+0

Проверьте приведенный выше код и сообщите мне, если проблема все еще сохраняется ... –