2011-01-11 3 views
0

У меня есть эта форма, использующая данные по умолчанию, и я должен быть уверен, что они очищены перед отправкой. У меня есть сценарий отбойного молотка, который это сделает, но мне интересно, не захочет ли кто-нибудь из меня помочь мне усовершенствовать его.Эффективный способ написать инструкцию jQuery if для нескольких элементов

Сценарий ниже работает и отлично подходит, если я хочу написать его для каждого ввода в форме (в настоящее время 8 с данными по умолчанию). Я попытался выбрать все входы в форме с несколькими разными подходами, но ничего не работает. Я полагаю, что есть гораздо более разумный способ приблизиться к этому, чем я способен, поэтому я пришел сюда :)

$('#form_input_submit').click(function() { 
    if ($('#specific_input_id').val() == $('#specific_input_id').attr('data-default')) { 
     $('#specific_input_id').val(''); 
    } 
    return true; 
}); 
+0

Это отличные ответы, я собираюсь сэкономить каждый из них для тестирования позже! Спасибо всем, стоповые камни! –

ответ

1

Это проверит все элементы ввода, которые имеют элемент данных по умолчанию, и очистит эти поля перед отправкой.

$('#tour_submit').click(function() { 
    $('input[data-default]').each(function(index) { 
     if ($(this).val() == $(this).attr('data-default')) { 
     $(this).val(''); 
     } 
    }); 
}); 
+0

Я смог вытащить этот фильм и сразу его обработать. –

+0

Это также отличный ответ. Но вы можете сделать что-то подобное на onSubmit (.submit() ...), а не на кнопку отправки кнопки, и просто вернуть true. –

1

Вы можете получить все входы в форме, и перебирать их. Если некоторые из них относятся к радио или выбору, нам нужно немного изменить его.

$('#form_input_submit').click(function() { 
    $(this).closest('form').find('input').each(function() { 
     if(this.value == $(this).attr('data-default')) { 
      this.value = ''; 
     } 
    }); 
}); 

На щелчком кнопки form_input_submit, он получает .closest() предка <form>, и из него будет .find() всех <input> элементов.

Затем он выполняет итерацию по коллекции с использованием .each().

Если $(this).attr('data-default') представляет начальное значение входа, как он пришел с сервера (или каким-либо образом от его исходного состояния), вы могли бы сделать это вместо:

if(this.value == this.defaultValue) { 
     this.value = ''; 
    } 
0

Попробуйте давая все входные элементы класс, то сделать это

 
$('#form_input_submit').click(function() { 
    $('.inputs').each(function() { 
     if ($(this).val() == $(this).attr('data-default')) { 
      $(this).val(''); 
     } 
    }); 
    return true; 
}); 
+0

Или вы могли бы просто указать: $ (this) .find ('input'), нет необходимости назначать класс всем входам. :) –

1

Вы можете передать функцию .val(), упрощая код до этого для всех входов:

$('#form_id').submit(function() { 
    $(this).find('[data-default]').val(function(i, v) { 
     return $(this).data('default') == v ? "" : v; 
    }); 
}); 

Кроме того, вместо привязки к событию отправки кнопки click это прослушивает событие submit самого <form>.

+0

Это хороший ответ, хотя более быстрая находка была бы такой: $ (this) .find ('input [data-default]'), потому что он использует функцию jAndcript, встроенную в функцию getElementsByTagName. Если вы только выполняете поиск по [data-default], он будет просматривать каждый отдельный элемент DOM и выбирать элементы, которые имеют атрибут по умолчанию для данных, в результате чего селектор будет очень медленным. –

+0

@Highway - Две вещи, вы ограничиваете это * только * 'input' элементами таким образом, что относительно'