2016-10-06 3 views
1

Я пытаюсь написать код JavaScript, чтобы ввести кучу оценок в онлайн-книгу. Класс Книга представляет собой таблицу с входами: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]"> 

Я написал код, который находит правильный вход поставить студентов имя в путем доступа к ария-метки атрибут и сравнения и фамилии. Код успешно проходит и вводит оценки:

input.value = 10.5; 

Однако класс не отправляет. При вводе оценок вручную я должен сначала ввести оценку, а затем нажать «Ввод». После нажатия «Ввод» цвет окна ввода изменяется, и класс сохраняет, так что, если я обновляю уровень, остается.

Мой код этого не делает. После запуска кода поля ввода содержат оценки, но когда я обновляю их, все уходят. Поэтому на данный момент мне нужно пройти один за другим и нажать на вход, а затем нажать «Ввод».

У меня есть массив со всеми входами. Затем я нахожу правильный индекс для ученика. Я пытался имитировать клавишу ввода нажмите на:

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

где входы является массив всех элементов ввода и я является показателем правильного ввода для студента.

Есть ли способ сделать то, что я пытаюсь сделать?

EDIT Я забыл упомянуть; вход не встроен в форму или что-то еще. Это просто автономно внутри строки таблицы.

EDIT Похоже, что это форма 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>?

EDIT Я пытался читать AJAX. Если у меня есть указанный <Input> объект (я буду называть его input1, я могу только сказать, что-то вроде:

$(input1).ajaxSubmit(); 
+0

Вы уверены, что '' input' в input.value = 10.5, 'действительно входной элемент, а не массив из входов или некоторых другой тип объекта? Кроме того, вам не нужно эмулировать ввод для этого ввода после изменения его значения. – IulianP

+0

Да. Все цифры введены правильно. Проблема в том, что они не отправляются. Но, похоже, для ввода не существует значения отправки. Единственный способ, которым я знаю, как подать оценки, - нажать Enter. – Joe

+0

@ Joe jsfiddle с вашим примером будет очень полезно, потому что я не могу получить, как вы можете отправить что-то без формы только с помощью html. Пожалуйста, добавьте все, что связано с вашим кодом здесь. – havenchyk

ответ

1

Нажатие Enter в элементе управления вводом вызывает change событие, которое затем обрабатывается $parent.onChangeGrade.Вместо отправку keypress события в программе, вы можете вызвать change события непосредственно:

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

Спасибо за бег с этой идеей @ConnorsFan. Я догадывался, и я рад, что вы смогли воплотить его в жизнь. –

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