2012-02-24 6 views
0

У меня есть форма с требованием плагина JQuery, который создает поле формы ввода с типом Facebook-автозаполнением вида стиля:JavaScript как условие для загрузки Rails формы?

<%= javascript_include_tag "form_prettify_library" %> 

<div class="box"> 
    <ul id="first_form" class="tagit"> 
     <li class="prettify-new"></li> 
    </ul> 
    <%= form_for @brand do |f| %> 
    <%= f.hidden_field :tag_list, :value => @brand.tags_from(current_user).join(", "), 
            :id => "mytaglist" %> 
    <%= f.submit "Add tags" %> 
    <%= f.error_messages %> 
    <% end %> 
</div> 

Это хорошо работает, но без JavaScript форма не работает, потому что форма выше имеет только скрытое поле и видимое поле ввода (поле ввода создается плагином внутри тегов), и мне нужно, чтобы это работало без JavaScript на мобильных устройствах. Есть ли способ показать код выше, если JavaScript загружен, иначе код будет отображаться, если это не так?

<div class="box"> 
    <%= form_for @brand do |f| %> 
    <%= f.label :tag_list, "Your tags" %> 
    <%= f.text_field :tag_list, :value => @brand.all_tags_list %> 
    <%= f.submit "Add tags" %> 
    <% end %> 
</div> 

ответ

3

Да, использовать CSS, чтобы скрыть его по умолчанию, и добавить класс к месту, когда JS включен

HTML

<body class="no_js"> 
<script type="text/javascript"> 
(function() { 
    var body = document.getElementsByTagName("body")[0]; 
    body.className = body.className.replace(/\bno_js\b/, " js ") 
}()) 
</script> 

Css

.no_js .jsForm, 
.js .no_jsForm { 
    display:none; 
} 

.js .jsForm, 
.no_js .no_jsForm { 
    display: block; 
} 
+0

Хотя это возможно, мне бы хотелось получить больше Rails-lik е решение. – Simpleton

+0

Это будет стандартный способ достижения того, что вам нужно. Получение рельсов (на стороне сервера) для обнаружения, если js доступно (на стороне клиента), невозможно без отправки другого запроса на сервер, поэтому единственной альтернативой является предоставление формы non js и получение js-формы через ajax, если он доступен, что будет медленнее в целом. Я не уверен, что вы подразумеваете под более рельсовым способом обработки (я не знаю Ruby или Rails), но ваше приложение на стороне сервера не может узнать заранее, если js включен - браузер не отправляет эту информацию в HTTP-запросе. – wheresrhys

+0

Я действительно хотел обнаружить какое-либо серверное обнаружение, возможно, реализацию WURFL, которая обнюхивает JS-совместимость. Тогда этого будет достаточно. – Simpleton

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