2016-03-26 76 views
0

我最近通過編寫Chrome擴展啓動了我的第一個JavaScript項目。它所做的只是填充頁面上的幾個文本框,然後通過頁面上的「保存/輸入」按鈕提交表單。未檢測到Javascript文本字段值更改

我的問題是我通過textbox.value = "foo"設置了文本框中的值,但是當我點擊「保存」時,它會顯示「請在以下字段中輸入值」,並返回所有帶有設置值的框。在設置文本之前,我已經嘗試設置焦點並在輸入框上使用點擊方法,但這也沒有奏效。如果我手動點擊一個框,並輸入一個字符,錯誤消失。

我現在的片段看起來是這樣的:

var inputBoxes = document.getElementsByClassName("foo"); 
for (var j = 0; j < length; j++) { 
    inputBoxes[j].click(); 
    inputBoxes[j].focus(); 
    inputBoxes[j].value = correctStrings[j]; 
} 

哪裏correctStrings是我想輸入值的數組。

編輯:

長度= inputBoxes.length

另外的問題是不與填充所述文本框。它們在循環中正確設置,文本出現在框中。

編輯編輯:

some gif huh

這裏就是我的意思(它正在對SmugMug的使用關鍵字提取,因爲他們的API不支持智能畫廊關鍵字)。

相關驗證碼:

   var ingredients = []; 

       var error = false; 

       for(var i in this.ingredients) { 
        if (YAHOO.lang.hasOwnProperty(this.ingredients, i)) { 

         var ingredient = this.ingredients[i].ingredient; 
         var ingredientDiv = this.ingredients[i].ingredientDiv 
         YAHOO.util.Dom.removeClass(ingredientDiv,'sm-formitem-error'); 

         // don't send the blank ones 
         if(
          (ingredient.Type == 'Keyword' && ingredient.options.word !== '') || 
          (ingredient.Type == 'Gallery' && ingredient.options.AlbumID !== '') || 
          (ingredient.Type == 'Geography' && ingredient.options.lat !== '' && ingredient.options.long !== '' && ingredient.options.radius !== '') || 
          (ingredient.Type == 'Date' && ingredient.options.dateType == 'Range' && ingredient.options.dateOptions.start !== '' && ingredient.options.dateOptions.stop !== '') || 
          (ingredient.Type == 'Date' && ingredient.options.dateType == 'Dynamic') || 
          (ingredient.Type == 'Popular') 
         ) { 

          // check that the dates are in the right order 
          if(ingredient.Type == 'Date' && ingredient.options.dateType == 'Range') { 
           var startParts = ingredient.options.dateOptions.start.split("/"); 
           var stopParts = ingredient.options.dateOptions.stop.split("/"); 
           var startDate = YAHOO.widget.DateMath.getDate(startParts[2],startParts[0]-1,startParts[1]); 
           var stopDate = YAHOO.widget.DateMath.getDate(stopParts[2],stopParts[0]-1,stopParts[1]); 
           if(YAHOO.widget.DateMath.after(startDate,stopDate)) { 
            var tmp = ingredient.options.dateOptions.start; 
            ingredient.options.dateOptions.start = ingredient.options.dateOptions.stop; 
            ingredient.options.dateOptions.stop = tmp; 
           } 
          } 

          ingredients.push(flattenIngredient(ingredient)); 
         } 
         else { 
          if(this.ingredients.length != 1 || 1 == 1) { 
           YAHOO.util.Dom.addClass(ingredientDiv,'sm-formitem-error'); 
           error = true; 
          } 
         } 
        } 
       } 

       var recipe = { 
        'useUnlisted': this.albumRecipe.useUnlisted, 
        'maxPhotos': this.albumRecipe.maxPhotos, 
        'match' : this.albumRecipe.match, 
        'ingredients': ingredients 
       }; 

       return (error) ? false : recipe; 
+0

什麼是「長度」? – millerbr

+0

你的代碼工作[小提琴](https://jsfiddle.net/1a6vcjx4/)。使用焦點事件的原因是什麼? –

+0

對。所以我的代碼工作正常。問題是網頁無法識別更改並認爲表單爲空。焦點()和點擊()只是測試,看看是否會使窗體識別更改/文本輸入,但它不起作用。 – Phrank

回答

0

看起來你已經對你的循環使用了錯誤的length,所以它永遠不會執行。請嘗試:

for (var j = 0; j < inputBoxes.length; j++) { 
    inputBoxes[j].value = correctStrings[j]; 
}