在JavaScript函数调用中包含ListItem变量

在JavaScript函数调用中包含ListItem变量,javascript,asp.net,Javascript,Asp.net,我有一个嵌套的ListView(Master/Detail),希望在DetailItemTemplate中调用一个JavaScript函数,以便该函数可以调用服务器站点上的静态方法并发布字段更新。我需要在函数调用中包含三个数据变量,其中两个必须来自ListItem数据。嵌入在内部列表视图中的列表项中包含的对SaveAnswer的JavaScript调用未正确呈现。代码必须传递三个变量:ThisPAQID是来自codebehind的公共变量。我可能会在这个页面上把它变成一个隐藏变量Question

我有一个嵌套的ListView(Master/Detail),希望在DetailItemTemplate中调用一个JavaScript函数,以便该函数可以调用服务器站点上的静态方法并发布字段更新。我需要在函数调用中包含三个数据变量,其中两个必须来自ListItem数据。嵌入在内部列表视图中的列表项中包含的对SaveAnswer的JavaScript调用未正确呈现。代码必须传递三个变量:ThisPAQID是来自codebehind的公共变量。我可能会在这个页面上把它变成一个隐藏变量QuestionID是当前listitem中的一个变量,包含在SaveAnswer方法调用之前的表格单元格中

嵌套的listview工作得很好,如果我在函数调用中伪设PAQID和QuestionID值(例如SaveAnswer(1,1,this.Value)),它工作得很好

<asp:ListView ID="lstQuestions" runat="server" OnItemDataBound="lstQuestions_ItemDataBound">
  <LayoutTemplate>
    <table>
      <asp:PlaceHolder ID="ItemPlaceholder" runat="server" />
    </table>
  </LayoutTemplate>
  <ItemTemplate>
    <tr>
      <td style="width: 40px;" valign="top">
        <asp:Label ID="lblSectionCode" runat="server" Text='<%#Eval("SectionCode")%>' />.
        <asp:Label ID="lblSubsectionNumber" runat="server" Text='<%#Eval("SubsectionNumber")%>' />
      </td>
      <td colspan="2" valign="top" style="font-size: larger; font-weight: bold; text-decoration: underline;"><%#Eval("SectionName")%></td>
      <td valign="top" style="font-size: larger; font-weight: bold; text-decoration: underline;"><%#Eval("SubsectionName")%></td>
    </tr>
    <tr>
      <th align="left">Q #</th>
      <th align="left">Question</th>
      <th align="left">Answer</th>
      <th align="left">Description / Scale</th>
    </tr>
    <asp:ListView ID="lstAnswers" runat="server" DataKeyNames="QuestionID" OnItemDataBound="lstAnswers_ItemDataBound">
      <LayoutTemplate>
      <tr id="ItemPlaceholder" runat="server" />
      </LayoutTemplate>
    <ItemTemplate>
      <tr>
        <td style="vertical-align: top; font-weight: bold;"><asp:Label ID="lblQuestionID" runat="server" Text='<%#Eval("QuestionID")%>' /></td>
        <td style="vertical-align: top;"><asp:Label ID="lblQuestionText" runat="server" Text='<%#Eval("Question")%>' /></td>

.
Q#
问题
答复
说明/比例
旧代码:

<td style="vertical-align: top;"><asp:TextBox ID="txtAnswer" runat="server" Text='<%#Eval("Answer")%>' CssClass="DataEntry" MaxLength="3" Width="30px" onblur='SaveAnswer(<%#=Eval("ThisPAQID"%>,<%#=Eval("QuestionID"%>,this.value)' /></td>
<td style="vertical-align: top;">
  <asp:TextBox ID="txtAnswer" runat="server" Text='<%#Eval("Answer")%>' CssClass="DataEntry" MaxLength="3" Width="30px" />
  <script type="text/javascript">
    var textBox = document.getElementById("txtAnswer");
    if (document.attachEvent) {
      document.attachEvent("onblur", textBox, function() {
        SaveAnswer('<%#Eval("ThisPAQID")%>', '<%#Eval("QuestionID")%>', window.event.target.value);
      });
    } else {
      document.addEventListener("blur", textBox, function() {
        SaveAnswer('<%#Eval("ThisPAQID")%>', '<%#Eval("QuestionID")%>', this.value);
      }, false);
    }
  </script>
</td>
    <td style="vertical-align: top; font-size: -1;"><%#Eval("Description")%></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
    <td style="font-size: smaller; font-style: italic;"><%# Eval("ScaleText") %><br /><br /></td>
  </tr>
</ItemTemplate>

新代码:

<td style="vertical-align: top;"><asp:TextBox ID="txtAnswer" runat="server" Text='<%#Eval("Answer")%>' CssClass="DataEntry" MaxLength="3" Width="30px" onblur='SaveAnswer(<%#=Eval("ThisPAQID"%>,<%#=Eval("QuestionID"%>,this.value)' /></td>
<td style="vertical-align: top;">
  <asp:TextBox ID="txtAnswer" runat="server" Text='<%#Eval("Answer")%>' CssClass="DataEntry" MaxLength="3" Width="30px" />
  <script type="text/javascript">
    var textBox = document.getElementById("txtAnswer");
    if (document.attachEvent) {
      document.attachEvent("onblur", textBox, function() {
        SaveAnswer('<%#Eval("ThisPAQID")%>', '<%#Eval("QuestionID")%>', window.event.target.value);
      });
    } else {
      document.addEventListener("blur", textBox, function() {
        SaveAnswer('<%#Eval("ThisPAQID")%>', '<%#Eval("QuestionID")%>', this.value);
      }, false);
    }
  </script>
</td>
    <td style="vertical-align: top; font-size: -1;"><%#Eval("Description")%></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
    <td style="font-size: smaller; font-style: italic;"><%# Eval("ScaleText") %><br /><br /></td>
  </tr>
</ItemTemplate>

var textBox=document.getElementById(“txtAnswer”);
如果(文件附件){
document.attachEvent(“onblur”、文本框、函数(){
SaveAnswer('','',window.event.target.value);
});
}否则{
document.addEventListener(“模糊”,文本框,函数(){
SaveAnswer(“”,,,this.value);
},假);
}
代码的其余部分:

<td style="vertical-align: top;"><asp:TextBox ID="txtAnswer" runat="server" Text='<%#Eval("Answer")%>' CssClass="DataEntry" MaxLength="3" Width="30px" onblur='SaveAnswer(<%#=Eval("ThisPAQID"%>,<%#=Eval("QuestionID"%>,this.value)' /></td>
<td style="vertical-align: top;">
  <asp:TextBox ID="txtAnswer" runat="server" Text='<%#Eval("Answer")%>' CssClass="DataEntry" MaxLength="3" Width="30px" />
  <script type="text/javascript">
    var textBox = document.getElementById("txtAnswer");
    if (document.attachEvent) {
      document.attachEvent("onblur", textBox, function() {
        SaveAnswer('<%#Eval("ThisPAQID")%>', '<%#Eval("QuestionID")%>', window.event.target.value);
      });
    } else {
      document.addEventListener("blur", textBox, function() {
        SaveAnswer('<%#Eval("ThisPAQID")%>', '<%#Eval("QuestionID")%>', this.value);
      }, false);
    }
  </script>
</td>
    <td style="vertical-align: top; font-size: -1;"><%#Eval("Description")%></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
    <td style="font-size: smaller; font-style: italic;"><%# Eval("ScaleText") %><br /><br /></td>
  </tr>
</ItemTemplate>



SaveAnswer生成的代码如下所示:

<tr>
  <td style="vertical-align: top; font-weight: bold;">
    <span id="ctl00_body_lstQuestions_ctrl0_lstAnswers_ctrl0_lblQuestionID">1</span>
  </td>
  <td style="vertical-align: top;"><span id="ctl00_body_lstQuestions_ctrl0_lstAnswers_ctrl0_lblQuestionText">Written materials</span>
  </td>
  <td style="vertical-align: top;">
    <input name="ctl00$body$lstQuestions$ctrl0$lstAnswers$ctrl0$txtAnswer" type="text" value="2.0" maxlength="3" id="ctl00_body_lstQuestions_ctrl0_lstAnswers_ctrl0_txtAnswer" class="DataEntry" style="width:30px;" />
  <script type="text/javascript">
    var textBox = document.getElementById("txtAnswer");
    if (document.attachEvent) {
      document.attachEvent("onblur", textBox, function() {
        SaveAnswer('13242', '1', window.event.target.value);
      });
    } else {
      document.addEventListener("blur", textBox, function() {
        SaveAnswer('13242', '1', this.value);
      }, false);
    }
  </script>

  </td>
  <td style="vertical-align: top; font-size: -1;">E.g., books, reports, office notes, articles, job instructions, or signs</td>
</tr>

1.
书面材料
var textBox=document.getElementById(“txtAnswer”);
如果(文件附件){
document.attachEvent(“onblur”、文本框、函数(){
SaveAnswer('13242','1',window.event.target.value);
});
}否则{
document.addEventListener(“模糊”,文本框,函数(){
SaveAnswer('13242','1',this.value);
},假);
}
例如,书籍、报告、办公室笔记、文章、工作说明或标志

当我在FireFox的代码中设置断点时,断点永远不会触发。我需要一个与此代码关联的“OnBlur”吗?显然我不是JavaScript向导。

它不起作用,因为您自动生成的id是“ctl00\u body\u lstQuestions\u ctrl0\u lstAnswers\u ctrl0\u txtAnswer”,这是垃圾+txtAnswer

有两种方法可以解决这个问题,一种是你想出一些聪明的办法,另一种是使用它

var textBox=$(“[id$='txtAnswer']”);

处理这个问题的最简单方法是使用一个小的脚本标记

<script>
   var textBox = document.getElementById("txtAnswer");
   if (document.attachEvent) {
        document.attachEvent("onblur", textBox, function() {
             SaveAnswer(
                 '<%#Eval("ThisPAQID")%>', 
                 '<%#Eval("QuestionID")%>', 
                 window.event.target.value
             );
        });
   } else {
       document.addEventListener("blur", textBox, function() {
           SaveAnswer(
               '<%#Eval("ThisPAQID")%>', 
               '<%#Eval("QuestionID")%>', 
               this.value
           );
       }, false);
   }
</script>

var textBox=document.getElementById(“txtAnswer”);
如果(文件附件){
document.attachEvent(“onblur”、文本框、函数(){
保存应答(
'', 
'', 
window.event.target.value
);
});
}否则{
document.addEventListener(“模糊”,文本框,函数(){
保存应答(
'', 
'', 
这就是价值
);
},假);
}

这仍然没有帮助。这是一个服务器端控件。@SLaks表示我不理解这个问题。我猜他想用服务器上的静态PAQID和静态QuestionID以及client@SLaks我知道你只能在HTML中使用这样的内联ASP!我不习惯这样做手动初始化事件处理。应该刚刚完成
$(textBox)。模糊(f);
所有列表项的PAQID值都是常量。QuestionID值随列表itme的每个实例而变化。txtAnswer包含必须与QuestionID一起保存的值。