Текстовые подсказки с помощью JQuery и JavaScript для цикла
Я занимаюсь разработкой небольшого приложения, в котором я прошу пользователей добавить информацию. Я хочу показать текстовые подсказки в полях ввода. Я делаю это в цикле for... Когда страница загружена, подсказки отображаются правильно, но ничего не происходит с событиями 'focus' и 'blur'...
Мне интересно, почему, так как, когда я не использую цикл for в моем js-коде, все работает find...
Кстати, причина, по которой я использую цикл for, заключается в том, что я не хочу повторяться, следуя принципам "СУХОЙ"...
Спасибо за вашу помощь!
LP
Вот код:
<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
var form_elements = ['#submission_url', '#submission_email', '#submission_twitter']
var text_hints = ['Website Address', 'Email Address', 'Twitter Username (optional)']
$(document).ready(function(){
for(i=0; i<3; i++) {
$(form_elements[i]).val(text_hints[i]);
$(form_elements[i]).focus(function(i){
if ($(this).val() == text_hints[i]) {
$(this).val('');
}
});
$(form_elements[i]).blur(function(i){
if ($(this).val() != text_hints[i]) {
$(this).val(text_hints[i]);
}
});
}
});
</script>
2 ответа
Я сделал это некоторое время назад. это будет делать то, что вы хотите
Query.fn.waterMark = function(options) {
var defaults = {
activeColor: '#484646',
inActiveColor: '#8E8E8E'
};
var settings = $.extend({}, defaults, options);
return this.each(function() {
var initVal = $(this).val();
$(this).focus(function() {
if ($(this).val() === initVal) {
$(this).val('').css({ 'color': defaults.activeColor });
}
else { return false }
});
$(this).blur(function() {
if ($(this).val() === '' || $(this).val() === initVal) {
$(this).val(initVal).css({ 'color': defaults.inActiveColor });
}
else { return false }
});
});
};
вы просто используете это как
$(function() {
$('input').waterMark();
});
это будет водяной знак, читая начальное значение. так что установите свой вклад как
<input type="text" value="Search here..." />
Ребята! сценарий, который я написал, там не тот, который я намеревался опубликовать... Во всяком случае, я написал другой сценарий, который прекрасно справляется с тем, что я хотел достичь.
Вот!
Ура!
<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
if (!Array.prototype.forEach)
{
Array.prototype.forEach = function(fun /*, thisp*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this)
fun.call(thisp, this[i], i, this);
}
};
}
var form_elements = ['#submission_url', '#submission_email', '#submission_twitter']
var text_hints = ['Website Address', 'Email Address', 'Twitter Username (optional)']
$(document).ready(function(){
form_elements.forEach(function(element, index, array){
$(form_elements[index]).val(text_hints[index]);
$(form_elements[index]).focus(function(){
if ($(this).val() == text_hints[index]) {
$(this).val('');
}
});
$(form_elements[index]).blur(function(){
if ($(this).val() != text_hints[index] && $(this).val() != '') {
return;
}
else if ($(this).val() == '') {
$(this).val(text_hints[index]);
}
});
});
});
</script>