Я пытаюсь написать код, который "хранит элементы для более позднего" - кнопка с 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 только для формы/отправки, которая была нажата?
Вам нужно будет найти скрытые поля для просмотра только текущей формы. В обработчике событий 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
для передачи значений полей.
Внутри обработчика формы вы получаете доступ к элементу формы через 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
из ваших входов.