JavaScript:输入值并提交文本输入

时间:2016-10-06 23:34:10

标签: javascript jquery

我正在尝试编写一个JavaScript代码,以便在一系列成绩中输入在线成绩簿。成绩簿是一个输入表:

<input type="text" maxlength="12" 
class="grade-entry input--flush" tabindex="1" 
data-bind="visible:!$parent.assignment.useLetterGradingScheme,
value:gradeString, disable:showDetail || 
!$parent.permissions.AssignGrades || (isGradeApproved &amp;&amp;
!$parent.permissions.ChangeApprovedGrades), event:
{change:$parent.onChangeGrade,focus:$parent.onFocus}, 
attr:{'aria-label':'Grade for ' + sortableName}, 
css:{'animate-saving':saving, 'success':isGradeApproved}" 
aria-label="Grade for [last name], [first name] [middle initial]">

我编写了一个代码,通过访问 aria-label 属性并比较名字和姓氏来找到输入学生姓名的正确输入。代码通过以下方式成功完成并输入成绩:

input.value = 10.5;

但是,等级不提交。手动输入成绩时,我必须先输入成绩,然后按“Enter”键。按“Enter”后,输入框的颜色会发生变化,等级会保存,这样如果我刷新等级就会保留。

我的代码不会这样做。运行代码后,输入字段包含成绩,但是当我刷新它们时它们都会消失。所以目前我必须逐一完成,然后点击输入,然后按“Enter”。

我有一个包含所有输入的数组。然后我找到了学生的正确索引。我试图通过以下方式模拟Enter键:

var e = jQuery.Event("keypress");
e.which = 13; //choose the one you want
e.keyCode = 13;
$(inputs[i]).trigger(e);

其中输入是所有输入元素的数组,而 i 是学生正确输入的索引。

有什么办法可以做我想做的事吗?

修改 我忘了提;输入未嵌入表单或任何内容中。它只是在表格行中独立。

修改 看起来它是一个AJAX形式。我对AJAX并不是很熟悉,但是我在下面添加了一个名为$.fn.ajaxSubmit的函数的一小部分(只有一小部分,因为整个函数真的很长)。参数options是多少?如果我的options参数正确,我可以调用此函数来提交它吗?

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
    /*jshint scripturl:true */

    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
    if (!this.length) {
        log('ajaxSubmit: skipping submit process - no element selected');
        return this;
    }

    var method, action, url, $form = this;

    if (typeof options == 'function') {
        options = { success: options };
    }

    method = this.attr('method');
    action = this.attr('action');
    url = (typeof action === 'string') ? $.trim(action) : '';
    url = url || window.location.href || '';
    if (url) {
        // clean url (don't include hash vaue)
        url = (url.match(/^([^#]+)/)||[])[1];
    }

    options = $.extend(true, {
        url:  url,
        success: $.ajaxSettings.success,
        type: method || 'GET',
        iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
    }, options);

    // hook for manipulating the form data before it is extracted;
    // convenient for use with rich editors like tinyMCE or FCKEditor
    var veto = {};
    this.trigger('form-pre-serialize', [this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
        return this;
    }
    ....
    ....

回想一下,使用我当前的代码,我找到每个学生的实际<Input>对象并更新该值。那么我可以用指定的<Input>调用上面的函数并提交我刚才放在<Input>中的任何值吗?

修改 我一直试图阅读AJAX。如果我有指定的<Input>对象(我称之为input1,我可以这样说:

$(input1).ajaxSubmit();

1 个答案:

答案 0 :(得分:1)

在输入控件中按 Enter 会触发change事件,然后由$parent.onChangeGrade处理。您可以直接触发keypress事件,而不是以编程方式发送change事件:

$(inputs[i]).trigger("change");