2016-10-06 13 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; 

ただし、グレードは提出されません。手動で成績を入力するときは、最初に成績を入力してから、「Enter」を押す必要があります。 "Enter"を押すと、入力ボックスの色が変わり、グレードが保存されるので、グレードをリフレッシュすると変わりません。

私のコードはこれをしません。コードを実行した後、入力フィールドにはグレードが含まれますが、リフレッシュするとすべて消えます。ですから、現時点では、1つずつ順番に入力し、入力をクリックしてから「Enter」を押す必要があります。

私はすべての入力を持つ配列を持っています。私は学生の正しい指数を見つける。私はは、学生のための正しい入力の指標である

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を読もうとしています。 その後$parent.onChangeGradeによって処理されchangeイベントをトリガ入力コントロールにをEnterを押すと

$(input1).ajaxSubmit(); 
+0

はあなたがinput' input.value ''でよろしいです= 10.5; '本当に入力要素ではなく入力または一部の配列です他のタイプのオブジェクト?また、値を変更した後でこの入力の入力をエミュレートする必要もありません。 – IulianP

+0

はい。すべての数字が正しく入力されます。問題は彼らが提出していないということです。しかし、入力に許可されたサブミット値はないようです。私が成績を提出する方法を知っている唯一の方法は、Enterを押すことです。 – Joe

+0

@Joe jsfiddleあなたの例では非常に役立ちます、私はあなたがHTMLだけでフォームなしで何かを提出する方法を得ることができないためです。あなたのコードに関連するすべてをここに追加してください。 – havenchyk

答えて

1

:私は指定された<Input>オブジェクトを持っている場合は(私が何かのように私は言うことができ、それinput1を呼び出します。代わりに、プログラムkeypressイベントを送信するには、直接changeイベントトリガすることができます。

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

そのアイデア@ConnorsFanを実行していただきありがとうございます。私は推測していたので、あなたはそれを実現することができてうれしいです。 –

関連する問題