2013-03-06 2 views
0

Я использую плагин validator для добавления различных полей пароля на сайт, каждый из которых освобождает соответствующую ссылку для загрузки при вводе успешного пароля. Проблема в том, что когда вводится правильный пароль, ВСЕ ссылки для загрузки отображаются, а не только соответствующие. Все поля будут иметь один и тот же пароль, и с течением времени будет добавлено больше файлов, я просто пытаюсь выяснить, как ТОЛЬКО показывать соответствующую ссылку для скачивания, а не все из них.
Вот jsfiddle (пароль «пароль»): http://jsfiddle.net/rqGWK/

JQuery:jQuery validator показать соответствующую ссылку для загрузки

jQuery(document).ready(function(){ 

jQuery(".article-form").hide(); 
jQuery(".download-file").hide(); 

jQuery('.article-link').click(function() { 
     jQuery(this).siblings('.article-form').fadeIn(); 
    }); 


    jQuery.validator.addMethod("pw_check", function (value) { 
     return (value == 'password'); 
    }, "Invalid password"); 


    jQuery(".article-form").validate({ 
     rules: { 
      password: { 
       required: true, 
       pw_check: true 
      } 
     }, 
     submitHandler: function (form) { 
      jQuery(".article-form").hide(); 
      jQuery(".download-file").fadeIn("slow"); 
     } 
    }); 

}); 
+0

Вы должны дать соответствующие '.download-File' и ID и показать, что вместо работающие на всех элементах '.download-file'. Кроме того, '.hide()' на самом деле не «защищает» что-либо. Это просто скрывает его от дисплея. Я бы не рекомендовал это, если вы действительно не беспокоитесь о безопасности. –

ответ

1

Я бы не рекомендовал использовать JQuery или любой стороне клиента код как инструмент для защиты содержимого. Это не настоящая безопасность.

Но ответьте на ваш вопрос .. просто найдите .download-file в .parent() и заверните свою функцию .validate(), чтобы каждая форма была подтверждена.

DEMO Обновлено.

jQuery('.article-link').click(function() { 
    if(jQuery(this).siblings('.download-file').css('display')=='none') 
     jQuery(this).siblings('.article-form').fadeIn(); 
}); 

jQuery(".article-form").each(function() { 
    jQuery(this).validate({ 
     rules: { 
      password: { 
       required: true, 
       pw_check: true 
      } 
     }, 
     submitHandler: function (form) { 
      jQuery(form).hide(); 
      jQuery(form).siblings(".download-file").fadeIn("slow"); 
     } 
    }); 
}); 
+0

Маленькая ошибка: если ссылка уже разблокирована, форма снова появляется равно – Sam

+0

@Sam я ее обновил. –

+0

@Michael_B отлично, работал шарм. Приветствия за этого Майкла! – user1374796

0

Что-то вроде этого?

DEMO VIEW

jQuery(document).ready(function(){ 

jQuery(".article-form").hide(); 
jQuery(".download-file").hide(); 

var actual; 
var validates = []; 

jQuery('.article-link').click(function() { 
    actual = $(this).closest('.article-download'); 
if(!validates[actual.index()]){ 
    $(".article-form").hide() 
    $(".article-form").eq(actual.index()).fadeIn(); 
} 
}); 


jQuery.validator.addMethod("pw_check", function (value) { 
    return (value == 'password'); 
}, "Invalid password"); 


jQuery(".article-form").validate({ 
    rules: { 
     password: { 
      required: true, 
      pw_check: true 
     } 
    }, 
    submitHandler: function (form) { 
     validates[actual.index()] = true; 
     jQuery(".article-form").hide(); 
     jQuery(".download-file").eq(actual.index()).fadeIn("slow"); 
    } 
}); 

}); 

PS: на стороне клиента отключаемые, помню сделать на стороне сервера управления

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