2014-11-27 4 views
0

В следующем коде я перерабатываю ту же функцию Ajax для большего количества форм. Одна из этих форм должна быть сброшена после отправки данных. Проблема в том, что код сброса (на 6-й строке) выполняется, даже когда происходит событие if (data). Как это могло произойти?jQuery: код выполняется, даже если он не должен

$('input[type="button"][id^=data_]').click(function() 
    if ($(this).attr('id') == 'data_update') { 
     [...] 
    } else if ($(this).attr('id') == 'data_submit') { 
     [...] 
     var extra_success = $('form[name="data_submit"] input[type=text]').val(''); 
    }; 
    $.ajax({ 
     [...] 
     success: function(data) { 
      if (data) { 
       $(div_for_response).html(data).css('color','red'); 
      } else { 
       $(div_for_response).html('Success!').css('color','green'); 
       if (extra_success) { 
        extra_success 
       } 
      } 
     } 
    }); 
}); 
+0

попытаться использовать return false; тогда выполнение останавливается там – asimshahiddIT

+0

@asimshahiddIT вы имеете в виду после 'var extra_success = $ ('form [name =" data_submit "] input [type = text]'). val ('');'? это остановит весь код – Mariano

ответ

1

Ваша проблема в том, что я думаю, что вы пытаетесь назначить funcion своей переменной var extra_success, пока вы фактически выполняете ее в тот момент. Попробуйте изменить код:

$('input[type="button"][id^=data_]').click(function() 
    if ($(this).attr('id') == 'data_update') { 
     [...] 
    } else if ($(this).attr('id') == 'data_submit') { 
     [...] 
     var extra_success = function() { 
      $('form[name="data_submit"] input[type=text]').val(''); 
     }; 
    }; 
    $.ajax({ 
     [...] 
     success: function(data) { 
      if (data) { 
       $(div_for_response).html(data).css('color','red'); 
      } else { 
       $(div_for_response).html('Success!').css('color','green'); 
       if (extra_success) { 
        extra_success(); 
       } 
      } 
     } 
    }); 
}); 

Таким образом вы назначаете функцию своей переменной, которую затем можете вызвать позже.

+0

вот оно! спасибо Dim! ;) Я думал, что уже пробовал это решение, но он нарушал код ... я, возможно, сделал опечатку ... – Mariano

1

Попробуйте использовать === Вам нужно точное сравнение

$('input[type="button"][id^=data_]').click(function() 
    if ($(this).attr('id') === 'data_update') { 
     [...] 
    } else if ($(this).attr('id') == 'data_submit') { 
     [...] 
     var extra_success = $('form[name="data_submit"] input[type=text]').val(''); 
    }; 
    $.ajax({ 
     [...] 
     success: function(data) { 
      if (data) { 
       $(div_for_response).html(data).css('color','red'); 
      } else { 
       $(div_for_response).html('Success!').css('color','green'); 
       if (extra_success) { 
        $('form[name="data_submit"] input[type=text]').val(''); 
       } 
      } 
     } 
    }); 
}); 
+0

ничего не изменится, и я не думаю, что проблема есть ... Я обновил код, поскольку я разместил его неправильно. таким образом, вы можете лучше понять ситуацию: '$ ('form [name =" data_submit "] input [type = text]'). val ('');', который содержится в 'extra_success', выполняется как если 'if (data)' is true или false – Mariano

1

Может быть, вы Переустановка Вэл, когда вы создаете переменную попробуйте вместо этого:

Это Meen, что вы будете проходить в первом if, создающем переменную. Даже если вы зашли в if(data), значение было удалено при создании переменной.

$('input[type="button"][id^=data_]').click(function() 
    if ($(this).attr('id') == 'data_update') { 
     [...] 
    } else if ($(this).attr('id') == 'data_submit') { 
     [...] 
     var extra_success = $('form[name="data_submit"] input[type=text]'); 
    }; 
    $.ajax({ 
     [...] 
     success: function(data) { 
      if (data) { 
       $(div_for_response).html(data).css('color','red'); 
      } else { 
       $(div_for_response).html('Success!').css('color','green'); 
       if (extra_success) { 
        extra_success.val(''); 
       } 
      } 
     } 
    }); 

}); 

Если сделать трюк, если ваш if заявление хороши.

+0

вот что я сначала подумал, но как это решить? ваше предложение не работает ... но даже если это сработало, я проецировал 'extra_success' работать даже с другими формами, поэтому не всегда нужно было бы присваивать пустое значение чему-то ... – Mariano

+0

Тогда необходимо быть чем-то другим вне фрагмента кода, потому что этот код должен работать должным образом. –

+0

ОК, моя ошибка (опечатка в коде): она работает спасибо ... но это не лучшее решение, как я объяснял ранее. на данный момент я могу оставить его таким образом, но есть ли лучшее решение? – Mariano

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