簡體   English   中英

將keyup事件從文本字段更改為下拉列表

[英]Changing a keyup event from a text field to a dropdown

我正在更改Rails中文本字段上的keyup事件以引用下拉菜單。 這是函數調用:

$(document).ready(function(){
    $('#survey_q1').keyup(calculate);
    $('#survey_q2').keyup(calculate);
    $('#survey_q3').keyup(calculate);
    $('#survey_q4').keyup(calculate);
    $('#survey_q5').keyup(calculate);
    $('#survey_q6').keyup(calculate);
});

function calculate(e)
{
    // Set each value as they come in
    var q1 = parseInt($('#survey_q1').val());
    var q2 = parseInt($('#survey_q2').val());
    var q3 = parseInt($('#survey_q3').val());
    var q4 = parseInt($('#survey_q4').val());
    var q5 = parseInt($('#survey_q5').val());
    var q6 = parseInt($('#survey_q6').val());
    // Don't do the calculation until all values are present
    if ( q1 > 0 && q2 > 0 && q3 > 0 && q4 > 0 && q5 > 0 && q6 > 0) {
        $('#survey_agent_score').val(
            parseFloat((((q2 + q3 + q4 + q5 + q6) + (1.5 * q1)) / 32.5) * 100).toFixed(2)
        );
    } else {
        $('#survey_agent_score').val('');
    }
}

這是更改之前的視圖:

    <table>
        <h4>Survey</h4>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_q1">Question 1:</label></td>
            <td><input id="survey_q1" name="survey[q1]" style="width:60px;text-align:left;" type="text" class="required" value="<%= survey['q1'] %>" /></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_q2">Question 2:</label></td>
            <td><input id="survey_q2" name="survey[q2]" style="width:60px;text-align:left;" type="text" class="required" value="<%= survey['q2'] %>" /></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_q3">Question 3:</label></td>
            <td><input id="survey_q3" name="survey[q3]" style="width:60px;text-align:left;" type="text" class="required" value="<%= survey['q3'] %>" /></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_q4">Question 4:</label></td>
            <td><input id="survey_q4" name="survey[q4]" style="width:60px;text-align:left;" type="text" class="required" value="<%= survey['q4'] %>" /></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_q5">Question 5:</label></td>
            <td><input id="survey_q5" name="survey[q5]" style="width:60px;text-align:left;" type="text" class="required" value="<%= survey['q5'] %>" /></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_q6">Question 6:</label></td>
            <td><input id="survey_q6" name="survey[q6]" style="width:60px;text-align:left;" type="text" class="required" value="<%= survey['q6'] %>" /></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: right;"><label for="survey_agent_score">Agent Score:</label></td>
            <td><input id="survey_agent_score" name="survey[agent_score]" style="width:90px;text-align:left;background-color:#D6D6D6;" type="text" class="required" value="<%= survey['agent_score'] %>" readonly /></td>
        </tr>
    </table>

這是我想在視圖中將文本字段更改為的代碼段:

<td><%= select_tag "survey[q1]", options_for_select(Call::ANSWERS, @call.survey['q1']), promt: "Please select ..." %></td>

這是添加Rails片段時呈現的HTML:

<td style="vertical-align: top; text-align: right;"><label for="survey_q1">Question 1:</label></td>
<td>
    <select id="survey_q1" name="survey[q1]" promt="Please select ..."><option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
</td>

這是當我在文本字段中輸入數值時,它調用keyup事件進行計算。 直到所有六(6)個字段都填寫完畢,它將在計算文本字段中顯示BLANK。 我想將數字值的文本輸入字段更改為數字的下拉列表。 我想保留的所有其他功能。

至於價值節省,那里沒有問題。 該事件的確使用鍵盤上的上/下/輸入觸發。 它只是不注冊鼠標的選擇。

這是一個工作示例。 我修改了您的代碼以使其簡單。 http://jsbin.com/oBoBAp/1/edit

的HTML

<div id="survey">
  <select id="q1" name="q1" class="q">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <select id="q2" name="q2" class="q">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <input id='survey_agent_score' name='survey_agent_score' />
</div>

JS

function calculate(e)
{
    // Set each value as they come in
    var q1 = parseInt($('#q1').val());
    var q2 = parseInt($('#q2').val());

    // Don't do the calculation until all values are present
    if ( q1 > 0 && q2 > 0) {
        $('#survey_agent_score').val(
            parseFloat((((q2) + (1.5 * q1)) / 32.5) * 100).toFixed(2)
        );
    } else {
        $('#survey_agent_score').val('');
    }
}
$('#survey').on('change', 'select', calculate);

我在這里找到了答案。

就像將:onchange添加到'select_tag'一樣簡單

<td><%= select_tag "survey[q1]", options_for_select(Call::ANSWERS, @call.survey['q1']), :onchange => 'calculate(survey_q1)' %></td>

這使我可以隨時進行計算,並可以下拉選擇數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM