Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Js путаются (при нажитии на один ипут выполняеться левый скрипт) (https://javascript.ru/forum/misc/46235-js-putayutsya-pri-nazhitii-na-odin-iput-vypolnyaetsya-levyjj-skript.html)

aleksandr8i 02.04.2014 18:34

Js путаются (при нажитии на один ипут выполняеться левый скрипт)
 
Привет друзья, помогите понять почему js путаются...

На странице несколько одинаковых скриптов есть вот так он выглядит:

var id_form = 'zakazat-paket';
        var success_msg = '<p>Ваша заявка отправлена</p>';
        function send_widget_form(i){
            $(i).attr('value','Загрузка');
            $.ajax({
                url : $('#'+id_form).attr('action'),
                    type: $('#' + id_form).attr('method'),
                    data: $('#' + id_form).serialize(),
                    success: function(data)
                    {
                        data = $(data).find('.result').text();
                        if (data === success_msg)
                        {
                            $('.result').addClass('good');
                        }
                        else
                        {
                            $('.result').removeClass('good');
                        }
                        $('.result').html(data);
                        $('#btn_send_ajax').attr('value', 'Отправить');
                    }
                });
                return false;
            }

И есть кнопка (инпут) при нажатии по которой выполняется скрипт вот она -
<input id="btn_send_ajax" class="orange_button" type="button" value="Отправить" onclick="send_widget_form($(this));"></input>


Так вот на странице таких скриптов около 5 штук почему-то при нажатии на на на инпут который принадлежит одному скрипту, выполняется другой скрипт, точно такой как вверху только с другим id у Form!?

Как можно сделать что бы при нажатии на инпут выполнялся именно тот скрипт который нужен?
Объясните почему так происходит?

Elitemaster 03.04.2014 09:58

Приведите, пожалуйста, пример другого скрипта. Может id button путает или сами функции.

aleksandr8i 03.04.2014 11:50

Клик то идет по функции
onclick="send_widget_form($(this));"

Функция send_widget_form во всех инпутах и скриптах одна и таже. Вроде как this должен указывать какой скрипт должен отработать, почитав стати на сайте понял это, но правильно ли я понял... игрался с this делал так
onclick="send_widget_form($(this))"
потом
onclick="send_widget_form(this);
и еще так
onclick="send_widget_form($(this.id));
вроде как последний вариант правильный но он не отрабатывает скрипт.. не знаю даже ) трудно мне даются эти скрипты.

jsnb 03.04.2014 17:20

Цитата:

Сообщение от aleksandr8i (Сообщение 305669)
Так вот на странице таких скриптов около 5 штук почему-то при нажатии на на на инпут который принадлежит одному скрипту, выполняется другой скрипт, точно такой как вверху только с другим id у Form!?

Этот код что ли продублирован на странице в нескольких местах?

aleksandr8i 03.04.2014 17:31

Цитата:

Сообщение от jsnb (Сообщение 305889)
Этот код что ли продублирован на странице в нескольких местах?

Да, но только значение(zakazat-paket) у var id_form = 'zakazat-paket'; разные т.е они соответствуют страницам куда нужно отсылать запрос.

и у form action=тоже разные

jsnb 03.04.2014 17:45

Мда... В общем, убираете все дубликаты кода оставляя только один экземпляр. id формы передаете как аргумент функции или определяете по свойству form у инпута. В общем, что-то типо этого:
var success_msg = '<p>Ваша заявка отправлена</p>';
function send_widget_form(i) {
  var id_form = i.form.id;
  $(i).attr('value', 'Загрузка');
  $.ajax({
    url: $('#' + id_form).attr('action'),
    type: $('#' + id_form).attr('method'),
    data: $('#' + id_form).serialize(),
    success: function (data) {
      data = $(data).find('.result').text();
      if (data === success_msg) {
        $('.result').addClass('good');
      } else {
        $('.result').removeClass('good');
      }
      $('.result').html(data);
      $('#btn_send_ajax').attr('value', 'Отправить');
    }
  });
  return false;
}

А в onclick инпутов писать так:
onclick="send_widget_form(this);"

aleksandr8i 03.04.2014 18:38

Плюсик в карму вам ) еще раз спасибо большое все работает )


Часовой пояс GMT +3, время: 19:31.