Поле наблюдателя: поле автозаполнения при выборе другого поля - PullRequest
1 голос
/ 20 июля 2010

Вот мой существующий код:

<% form_for(@match) do |f| %>
    <%= f.error_messages %>
    <fieldset>
        <p>
            <label>Name</label>
            <%= f.text_field(:name) %>
        </p>
        <p>
            <label>OR email address</label>
            <%= f.text_field(:email) %>
        </p>
    </fieldset>
    <p>
        <label>Points:</label>
        <%= f.text_field(:points) %>
    </p>
    <p>
        <%= f.submit 'Match' %>
    </p>

<% end %>

Когда пользователь выбирает поле электронной почты, я хочу автоматически заполнить Точки 50 и сделать это поле недоступным для редактирования. Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 11 августа 2010

Я предполагаю, что вы можете использовать Prototype (фреймворк Javascript), так как вы используете Rails. Это может быть излишним, но вы можете добавить наблюдателя в это поле, чтобы наблюдать за событием фокуса. Оттуда вызовите функцию, которая устанавливает значение поля точек на 50, а затем делает поле точек доступным только для чтения (или отключает поле). Примерно так:

// Add the observer on the field when the DOM loads
document.observe("dom:loaded", function() {

    // Observe object with ID = "match_email" for focus event
    $('match_email').observe('focus',respondToEmailFocus);
});

// Function to call when the user focuses on the email field
function respondToEmailFocus(event){
    // Find object with ID = "match_points" and set the value = 50
    $('match_points').value = 50;
    // Find the object with ID = "match_points" and make it read only
    $('match_points').readOnly=true;

    // Instead of setting to read only, you could disable the field using:
    // $('match_points').disable();
}

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

Хотя вы можете просто поместить этот код прямо в представление, лучше всего отделить ваш Javascript от кода представления (ненавязчивый Javascript). Вы можете поместить этот код в отдельный файл Javascript, а затем включить этот файл, используя javascript_include_tag Rail.

Если вы не хотите использовать Prototype, вы можете просто добавить атрибут onFocus в поле электронной почты и вызвать функцию, аналогичную приведенной выше (responseToEmailFocus). Поскольку вы не используете Prototype, вам придется использовать document.getElementById('match_points') вместо $('match_points'), чтобы найти поле точек.

0 голосов
/ 11 августа 2010

Сделайте это в JavaScript. Примерно так должно быть, если вы используете Prototype:

// Find the element with id=match_email and observe it for focus
$('match_email').observe('focus', function() {
  // When focus occurs:
  // Set the value of the element with id=match_points to 50
  // Make the same field read only
  $('match_points').value = 50;
  $('match_points').read_only = true ;
});
0 голосов
/ 09 августа 2010

Используйте JavaScript на onFocus, чтобы обновить значение поля

...