2010-09-09 3 views
1

У меня есть цикл, который создает набор данных для вызова ajax. Вот код:Поиск всех выбранных входов с помощью цикла с использованием jQuery

$(':input','#texes-test-entry-0').not(':button, :submit, :reset, :hidden').each(function(){ 
     varStr = $(this).attr("id").split('-'); 
     dataString = dataString + '&' + varStr[1] + '=' + $(this).val(); 
    }); 

Для всех текстовых входов $ (это) .val() получает мне значение, что мне нужно, но для отдельных входов, мне не нужно текстовое значение, кроме выбранное значение параметра.

Как поймать выбранные входы и относиться к ним по-другому?

Благодаря

ответ

0

Вам не нужно лечить отдельные элементы по-разному, метод val получит выбранное значение из избранных.

Пример:

<script type="text/javascript"> 
$(function(){ 
    var data = []; 
    $(':input','#texes-test-entry-0').not(':button, :submit, :reset, :hidden').each(function(){ 
    varStr = $(this).attr("id").split('-'); 
    data.push(varStr[1] + '=' + $(this).val().replace(/%/g,'%37').replace(/&/g,'%38')); 
    }); 
    var dataString = data.join('&'); 
    alert(dataString); 
}); 
</script> 

<form id="texes-test-entry-0"> 
    <input type="text" id="x-id1" value="as%&df" /> 
    <select id="x-id2"> 
    <option value="1">one</option> 
    <option value="2" selected="selected">two</option> 
    <option value="3">three</option> 
    </select> 
</form> 

Выход:

id1=as%37%38df&id2=2 
+0

Я понял это. У меня было что-то еще не так. :-) На другой ноте вы могли бы объяснить причину двух вещей: 1. Почему вы используете методы push и join вместо создания строки. 2. Почему вы использовали два метода замены. Я стараюсь учиться здесь, поэтому, если ответы очевидны, пожалуйста, юмористируйте меня. –

+0

@resonantmedia: Создание отдельных строк и объединение их вместе более эффективно, чем использование + = для построения строки. Каждый раз, когда вы используете + =, вы создаете новую строку, которая растет каждый раз, поэтому к тому времени, когда вы закончите, вы переместили намного больше данных, чем попали в итоговую строку. Замены на замену предназначены для URL-кодирования символов% и &, что приведет к поломке результата, если они оставлены без изменений. – Guffa

0

, если внутри цикла, который выбирает все входы и проверить, является ли текущий элемент имеет опцию, если да, то не обрабатывать его Постарайся положить.

if($(this).has('option')) 
{ 
<ignore> 
} 
else 
{ 
<process> 
} 
+0

Это по-прежнему возвращает оба выберите и текстовые входы. Любые другие идеи? –

+0

Как можно ввести текст, если ??? ??? –

Смежные вопросы