Несколько кнопок отправки на одной странице, но различимые (jquery)

0

Я пытаюсь написать код, который "хранит элементы для более позднего" - кнопка с URL-адресом элемента в виде скрытого ввода, при этом он вызывает скрипт php, который хранит хранилище в db. Я больше в php, очень мало знаю ничего объектно-ориентированного, но мне нужно использовать jquery для вызова php-скрипта, не перемещаясь туда

Проблема заключается в том, как назначить переменные x и y, когда у меня есть несколько форм на одной странице

Я мог написать только следующие

 $("form").bind('submit',function(e){
   e.preventDefault();

      var x =  $("input[type=hidden][name=hidden_url]").val();
      var y =  $("input[type=hidden][name=hidden_title]").val();



   $.ajax({
   url: 'save_storage.php?url='+x+'&tit='+y,
   success: function() {
    alert( "Stored!");
     location.reload();
   }
});

});

Он отлично работает, если у вас есть что-то вроде...

<form method="post" action="#">
 <input type="hidden" id="hidden_url"  name="hidden_url" value="<?php echo $sch_link; ?>"/>
 <input type="hidden" id="hidden_title" name="hidden_title" value="<?php echo $sch_tit; ?>"/>
 <input type="submit" id="send-btn"  class="store" value="Store" />
</form>

.. на странице у меня около 50 из них.

Они генерируются через for-loop. Предположим, я мог бы использовать $ я в качестве идентификатора, но как я могу сказать jquery, чтобы назначить vars только для формы/отправки, которая была нажата?

Теги:
forms
submit

2 ответа

1
Лучший ответ

Вам нужно будет найти скрытые поля для просмотра только текущей формы. В обработчике событий this будет относиться к форме, которая была отправлена. Это позволит найти входные данные, соответствующие данному селектору в этой форме.

$("form").bind('submit',function(e){
  e.preventDefault();

  var x =  $(this).find("input[type=hidden][name=hidden_url]").val();
  var y =  $(this).find("input[type=hidden][name=hidden_title]").val();

  $.ajax({
    url: 'save_storage.php',
    data: {
      url: x,
      tit: y
    },
    success: function() {
      alert( "Stored!");
      location.reload();
    }
  });
});

Как сказал @Musa, также лучше предоставить ключ data для вызова $.ajax для передачи значений полей.

  • 0
    Хорошо, $ (это) была вещь! Спасибо.
1

Внутри обработчика формы вы получаете доступ к элементу формы через this переменную. Вы можете использовать это, чтобы дать вашему селектору некоторый контекст при поиске соответствующих входных данных для передачи данных AJAX.

Вот как это сделать:

$("form").bind('submit',function(e) {
    e.preventDefault();

    // good practice to store your $(this) object
    var $this = $(this);

    // you don't need to make your selector any more specific than it needs to be
    var x = $this.find('input[name=hidden_url]').val();
    var y = $this.find('input[name=hidden_title]').val();

    $.ajax({
        url: 'save_storage.php',
        data: {url:x, tit: y},
        success: function() {
            alert( "Stored!");
            location.reload();
        }
    });
});

Кроме того, идентификаторы должны быть уникальными для каждой страницы, поэтому удалите атрибут id из ваших входов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню