Как получить значения из сгенерированного ввода текста? - PullRequest
2 голосов
/ 02 декабря 2011

Я создаю несколько полей ввода в цикле foreach:

<?php foreach($this->results as $value){?>
<td><a href="$" class="buttonDetails">View Detail</a>
<input name="processor" id="processor" type="text" value="<?php echo $value['processor']; ?>">
<input name="auth_code" class="auth_code" type="hidden" value="<?php echo $value['auth_code']; ?>"></td>
<? } ?>

, это даст мне что-то вроде:

<td>
<a href="$" class="buttonDetails">View Detail</a>
<input name="processor" class="processor" type="text" value="19">
<input name="auth_code" class="auth_code" type="text" value="4">
</td>
<td>
<a href="$" class="buttonDetails">View Detail</a>
<input name="processor" class="processor" type="text" value="9">
<input name="auth_code" class="auth_code" type="text" value="11">
</td>
...

, затем я попытаюсь получить значения:

$('.buttonDetails').live("click", function (){
    var processor = $('.processor').val();
    alert(processor);

    $.ajax({
            type: 'POST',
            dataType: 'json',
            url: '/decline/list',
            async: false,
            data: { 
                processor: processor,
                processor: auth_code
               },
            success: function(json) {
                $('#details').html(json.processor);
            }
    });
    return false;
});

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

есть идеи, как это исправить?Я пытался заменить классы с идентификаторами и 'click' на 'live', но все еще ничего

edit:

Я считаю, что мне нужно дифференцировать классы, чтобы он знал, какое значение тянуть... ??

edit: что, если я тоже хочу получить 'auth_code'?

Ответы [ 6 ]

4 голосов
/ 02 декабря 2011

Попробуйте:

$('.buttonDetails').live("click", function (){
    var processor = $(this).next(".processor").val();
    alert(processor);
    /* snip */
});

Используйте next, чтобы получить ввод рядом со ссылкой, по которой щелкнули.

<ч />

Обновление (из-за комментария).

Вы можете найти auth_code аналогично, используя nextAll вместо:

var auth_code = $(this).nextAll(".auth_code").val();

Кроме того, вы уверены, что указали правильные значения для своего вызова AJAX? Похоже, вы указываете processor дважды. Первое значение, указанное для processor, будет перезаписано.

1 голос
/ 02 декабря 2011

используйте Jquery .next (), который должен дать вам следующий элемент

1 голос
/ 02 декабря 2011
        data: { 
            processor: processor,
            processor: auth_code
           },

строка 'auth_code' перезапишет строку 'процессора', что делает ее

        data: { 
            processor: auth_code
           },

только. Вы не можете иметь один ключ с двумя разными значениями в ассоциированном массиве / объекте. Для отправки полей с одинаковыми именами в PHP используйте нотацию fieldname[], которая указывает PHP обрабатывать это конкретное поле формы как массив.

<input name="processor[]" ...>
<input name="processor[]" ...>

и передать данные в JQuery через

data : $(this).serialize()
1 голос
/ 02 декабря 2011

Если вы просто хотите следующий элемент, вы можете использовать jquery next ()

$('.buttonDetails').live("click", function (){
  var processor = $(this).next().val();
  alert(processor);
  return false;

});

вот скрипка

http://jsfiddle.net/znge4/1/

0 голосов
/ 02 декабря 2011

Все, что вам нужно сделать, это получить значение от элемента, по которому они щелкнули. Использование ключевого слова this в Jquery должно решить вашу проблему.

$('.buttonDetails').live("click", function (){
var processor = $(this).next().val();
alert(processor);

«this» выберет «a», по которому они щелкнули, затем next будет перебирать следующего родного брата, в данном случае ваш ввод, и val извлекает это значение, как и раньше.

0 голосов
/ 02 декабря 2011

Вы получаете одно и то же значение независимо от того, какой тег привязки был нажат по этой строке:

var processor = $('.processor').val();

Вы ищете во всем DOM все элементы с классом «процессор», который возвращает каждый ввод,и затем .val () вернет значение ПЕРВОГО совпадения (первый вход).

Попробуйте вместо этого:

var processor = $(this).next('.processor').val();
...