我正在尝试编写一个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 &&
!$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();
答案 0 :(得分:1)
在输入控件中按 Enter 会触发change
事件,然后由$parent.onChangeGrade
处理。您可以直接触发keypress
事件,而不是以编程方式发送change
事件:
$(inputs[i]).trigger("change");