jQuery click

  • Автор Автор Galli
  • Начална дата Начална дата

Galli

Registered
Как мога да взимам value и id на текстовите полета от примера по-долу. Направил съм го да не презарежда страницата при submit. Взима id на натисантия бутон обаче със съдържанието на текстовото поле не мога да се справя. Пробвах с $('.text').val() обаче ми дава все value на първото поле. Пробвах с
[js]$('.switch_form').click(function(event){
event.preventDefault();
$('#test').html($(this).serialize());
})[/js]
Така пък ми дава само text=стойност, но без id-тата. Мога да го направя с hidden полета, но не ми се иска.

Въпросът е как да взима id на form, id и value на полето name="text" от съответната форма, чийто submit е натиснат?

Това нещо ще го ползвам с $.post и към база данни.

Ето пример.
[js]<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script>
$(document).ready(function(){
$('.button').click(function(event){
event.preventDefault();
$('#test').html($(this).attr('id'));
})
})
</script>

<div id="test"></div>

<form action="" method="post" class="switch_form">
<input type="text" name="text" class="text" id="text_1" value="1">
<input type="submit" name="button" class="button" id="button_1" value="switch">
</form>
<form action="" method="post" class="switch_form">
<input type="text" name="text" class="text" id="text_2" value="2">
<input type="submit" name="button" class="button" id="button_2" value="switch">
</form>
<form action="" method="post" class="switch_form">
<input type="text" name="text" class="text" id="text_3" value="3">
<input type="submit" name="button" class="button" id="button_3" value="switch">
</form>[/js]
Ето тези http://www.electrictoolbox.com/jquery-get-set-form-values/ ги пробвах и нищо не стана.
 
Преработих малко първият ти вариант. Сега тя записва в масив id на form елемента (не си ги задал в html кода!) и name, id и value на всички input елементи във формата.

[js]$(document).ready(function(){
// закачаме за submit event-а
$('.switch_form').submit(function(event){
event.preventDefault();
// взимаме всички input елементи във формата
var $inputs = $('input', $(this)),
arr = {formID:$(this).attr('id'), inputs:{}};

// взимаме нужните стойности
$inputs.each(function(i){

var $t = $(this);
arr.inputs = {
id: $t.attr('id'),
name: $t.attr('name'),
value: $t.val()
};
});

$('#test').html(arr.toSource());
})
});[/js]
 
Можеш да хуукнеш натискането на бутон с определен клас, след което да намериш ид-то на формата с parent функцията, както и id-to и value-то на input-a.

[js]<script type="text/javascript">
$(function() {
var but = $(".button");
but.on("click", function() {
var formid = but.closest("form").attr("id");
var inputid = but.closest("input").attr("id");
var inputval = but.closest("input").val();
});
});
</script>[/js]
 
F1r3Fl3x уникално! :) Обаче не работи в ИЕ6. Имаш ли идея как да заработи и в ИЕ6. Пише, че грешката е тук.
[js]$('#test').html(arr.toSource());[/js]

carbonated показва винаги информацията от първата форма, мисля, че номерът е в each.
 
:roll: Виж така. (не съм тествал)

[js]<script type="text/javascript">
$(function() {
var but = $(".button");
but.on("click", function() {
var formid = $(this).closest("form").attr("id");
var inputid = $(this).siblings("input").attr("id");
var inputval = $(this).siblings("input").val();
});
});
</script>[/js]
 
Пробвах JSON.stringify(arr, null, 2), пробвах toString(). Нищо не стана. toString() дава object.
Все още не ми се показват следващите отговори в темата.
 
toString си върши работата добре, но не ти трябва в случая. toSource не съществува в IE6 (за други версии не знам). Лично аз я използвам само за дебъгване от време на време. Правилно си се насочил към Json, точно това ти трябва, но не трябва да разчиташ на браузъра да има вградена имплементация на спесификацията. В по-старите браузъри липсва. Зареди json2.js в сайта си, и всичко трябва да е ок :)
https://github.com/douglascrockford/JSON-js
 
F1r3Fl3x toString не работи и под ФФ и ИЕ6 - пише [object Object] Аз добре съм се насочил, но гледам да избягвам всички допълнителни външни файлове.
carbonated да работи.
Сега ще го натрупам с още глупости и пак може да пиша. :)
 
Galli, точно такъв резултат трябва да ти върне toString, когато работиш с обекти.
Ако искаш да получаваш друг резултат, трябва да създадеш toString метод в обекта.
[js]
// глобално, за всички обекти
Object.prototype.toString = function () { /* твоя код тук */ };

// или локално, само за определен обект
MyObject.prototype.toString = function () { /* твоя код тук */ };
[/js]

Ако извикаш toString на масив, ще ти изведе друг резултат, защото там метода е зададен да връща стринг с всички елементи на масива:
[js]
[1, 2, 5, 'google', 'wt'].toString();
// ще даде резултат: "1,2,5,google,wt"
[/js]

Json има имплементация в почти всички браузъри: http://caniuse.com/#search=json
освен в IE 6, 7 и iOS 4

Файла json2.js ще го зареждаш само когато е нужно - когато typeof JSON ти върне undefined и си готов :)
 

Back
Горе