2016-03-30 5 views
0

私はnoobで、このサイトでは新しいので、この投稿を改善する必要があるかどうか教えてください。とにかく、私は自分のサイトで頻繁に再利用される関数を持っているので、グローバル変数に格納し、特定のボタンがクリックされたときに呼びたいと思っています。コードは次のようになります(下記参照)。私の問題は、ボタンのクリックが関数を呼び出そうとしていることを確認できますが、実際には呼び出されていないことです(アラートが発生せず、テキストフィールドの変更は保存されません)。このすべては、私がどこか間抜けミスを犯していないか、私は明らかに間違ってやっている何かがあることがありますか?グローバル変数に格納された関数は、呼び出されたときには実行されません。

$(document).ready(function() { 

//Description: 
//Global wrapper variable that contains all global functions. These include: 
// 1. saveAll: Saves all values not stored in session data to hidden fields  - this includes 
//   all added ingredient information. This allows us to manually pass values between 
//   client and server to save to db and also means we can eliminate Null values in table 
//   storage using a manual delimiter. 
//---------------------------------------------------------------------------------------------- 
var Global = (function() { 
    return { 
     saveAll: function() { 
      alert("entering save"); 
      //start by creating an array and initializing the length of the for loop 
      var saveValues = []; 
      var numVals = $('#HidRowCt').val(); 

      alert("numVals: " + numVals); 
      //Now loop through each ingredient row and create a string containing all textbox values 
      //in this case, we'll do so by creating an array and then combining the values with a custom delimeter 
      //the strings will then be saved, one by one, into the saveValues array, which will be serialized as a JSON object, 
      //stored in a hidden field, and passed to the server 
      for (i = 1; i < numVals; i++) { 
       var TxtIngName = $('#TxtIngName' + i).val(); 
       var TxtIngNumUnits = $('#TxtIngNumUnits' + i).val(); 
       var SelIngUnits = $('#SelIngUnits' + i).val(); 
       //make temporary array and string 
       var saveArr = new Array(TxtIngName, TxtIngNumUnits, SelIngUnits); 
       var saveStr = saveArr.join("-||-"); 

       saveValues.push(saveStr); 
      } 

      alert("Save Values: " + saveValues); 
      //this will automatically escape quotes, delimmited with "," 
      var jsoncvt = JSON.stringify(saveValues); 


      $("#HidSave").val(jsoncvt); 
     } 
    }; 
}); 

//---------------------------------------------------------------------------------------------- 
//Description: 
//Hijack the click event for the save button. Saves values not saved in session data. 
// 
//Functions: 
// Global.saveAll() 
//---------------------------------------------------------------------------------------------- 
$("#SaveChanges").data.clickEvent = $("#SaveChanges").attr('onClick'); //save onclick event locally 
$("#SaveChanges").removeAttr('onClick'); //and remove the onclick event 
$('#SaveChanges').on('click', function (event) { 

    Global.saveAll(); 
    //eval($("#SaveChanges").data.clickEvent); //now go ahead with the click event 
}); 

**まあ、私は決して... $(文書).read(機能に含まれていますなぜこれがうまくいかなかったのか分かりませんでしたが....

私はグローバル変数を削除してsaveAll()のために別の関数を作成していますが、うまくいきました。 Global.saveAll(同じ内臓)とうまく動作するので、私の前の行には珍しい何かがあるはずです。

あなたの提案をありがとう!

+1

をクリックするとエラーが表示されますか? – Bergi

+0

あなたの 'i'は' var'が欠けていますが、それは問題ではありません。 – Bergi

+0

「これはすべて$(ドキュメント).read(関数*」に含まれていますが、そのコードも表示できますか?これは簡単に問題になる可能性があります。 – Bergi

答えて

0

var Globalを宣言すると、レディクロージャ内にスコープが設定されるため、window.Global = ...を設定してみてください。

次に、後で使用できるはずです。

+0

何らかの理由で、まだ実行されません。 – Jirara

+0

https://plnkr.co/などのコードを記述することはできますか?また、$( '#SaveChanges')は実際に存在しますか? – wli

+0

私はplnkr.coが何であるかわからないので、わかりませんが、$( '#SaveChanges')は存在します(少なくとも100回はT.Tが問題であると思っていました)。 – Jirara

0

グローバル変数を削除してsaveAll()のための別の関数を作成しただけで動作します。

+0

なぜ、あなたがグローバルな名前空間を汚染しないようにしていたからですか? –

関連する問題