2017-08-24 81 views
0

我需要將aspx頁面中gridview的新選定行索引傳遞給我的javascript。但是代碼只能獲取變量的初始值,並且當腳本再次運行時,它包含未更新的值。在我的代碼從後面的代碼通過變量到javascript不更新

變量後面是「SelectedRowIndex」,它是一個整數

window.addEventListener("keydown", function (event) { 
 
     console.log('<%= SelectedRowIndex %>'); 
 
     var validArrowKey = false; 
 
     var index = '<%= SelectedRowIndex %>'; 
 

 
     if (event.keyCode == 40) { 
 
      validArrowKey = true; 
 
      index++; 
 
     } 
 
     else if (event.keyCode == 38 && index > -1) { 
 
      validArrowKey = true; 
 
      index--; 
 
     } 
 

 
     if (validArrowKey) { 
 
      var trPaymentDetails = document.getElementById("trPaymentDetails_" + index.toString()) 
 

 
      if (trPaymentDetails) { 
 
       __doPostBack('ctl00$MainContent$grdPaymentDetails', 'Select$' + index.toString()); 
 
      } 
 
      else 
 
       __doPostBack('ctl00$MainContent$grdPaymentDetails', 'Select$' + index.toString()); 
 

 
     } 
 
    }, false);

要設置所選擇的行索引的初始值,用戶必須單擊在GridView的行首先,在該觸發器內部將變量設置爲用戶選擇的行。

+1

您剛剛分配了一個匿名函數,每次發生keydown事件時都會執行該函數。所以每次都會執行裏面的變量聲明。這就是爲什麼它始終是初始值。嘗試將索引聲明爲全局變量。 –

+0

用戶首先必須單擊gridview中的一行來設置第一個索引。 –

回答

1

index變爲全局變量,將其移動到函數外部,然後僅設置一次。

var index = '<%= SelectedRowIndex %>'; 
window.addEventListener("keydown", function (event) { 
     console.log('<%= SelectedRowIndex %>'); 
     var validArrowKey = false; 

     if (event.keyCode == 40) { 
      validArrowKey = true; 
      index++; 
     } 
     else if (event.keyCode == 38 && index > -1) { 
      validArrowKey = true; 
      index--; 
     } 

     if (validArrowKey) { 
      var trPaymentDetails = document.getElementById("trPaymentDetails_" + index.toString()) 

      if (trPaymentDetails) { 
       __doPostBack('ctl00$MainContent$grdPaymentDetails', 'Select$' + index.toString()); 
      } 
      else 
       __doPostBack('ctl00$MainContent$grdPaymentDetails', 'Select$' + index.toString()); 

     } 
    }, false); 
+0

確定它的工作原理,但爲什麼當我得到Gridview中新的總行數仍然返回0即使它有行?我把它放在函數上面 「var totalRows ='<%= grdPaymentDetails.Rows.Count%>';」 –

+0

如果沒有所有的代碼,無論是服務器端還是客戶端,這都很難回答。您可以改爲使用網格「datasource」的Count屬性來替換「<%= grdPaymentDetails.Rows.Count%>」 – mortb

相關問題