在 jQuery 中填充文本框时执行 javascript 函数?

Posted

技术标签:

【中文标题】在 jQuery 中填充文本框时执行 javascript 函数?【英文标题】:Execute a javascript function when textbox is populated in jQuery? 【发布时间】:2011-01-01 09:54:34 【问题描述】:

当文本框填充文本时,如何在 javascript 中执行函数?对用户隐藏的文本框。它将由 USB 磁卡刷卡器填充。

伪代码:

<script language="javascript" type="text/javascript">
    function MyFunction() 
        //execute this function when MyTxtBox is populated
    
</script>
<asp:TextBox id="MyTxtBox" runat="server" Visible="false" />

【问题讨论】:

文本框到底是什么?是文本区域吗? 不,它不是文本区域。如果有帮助,我可以更改它。对用户隐藏很重要。 当你说值是由USB磁卡刷卡器填充的时候,是在服务器端完成的吗?如果是,则文本框(JS)的 OnChange 可能不会触发。所以你可能不得不接受蒙克的第一个建议。 @ps - 不,它是在客户端完成的。用户刷卡,页面回调,并在屏幕上发布卡片轨迹数据进行验证。 【参考方案1】:

页面加载时您似乎正在这样做。如果你是,这会工作。

$(document).ready(function()
   if($('#MyTxtBox').val().length > 0)
      MyFunction();
   
);

如果它正在更改:

$(document).ready(function()
   $('#MyTxtBox').change(function()
       if($(this).val().length > 0)
          MyFunction();
       
   );
);

【讨论】:

我在 on change 示例中收到“预期的 ',' 或 ')'”编译错误。 哎呀,更改功能结束后应该有一个);。现在已经修复了 MyTxtBox 样式属性未设置为display:none; 时,您的回答有效。 MyTxtBox 隐藏时不起作用 查看我关于 visible=false 的回答 @Jon P - 我正在使用 CSS 隐藏文本框控件,但它不起作用。我也在尝试在页面加载期间设置焦点。【参考方案2】:

查看 munch 的答案,但使用 CSS 隐藏文本框,因为设置 visible = false 将导致文本框 html 不被呈现,因此在客户端不可用。

<style type="text/css">
.USBBox
 
     position: absolute;
     left: -999em; 
     overflow: hidden;
  
 </style>   
<asp.textbox id="MyTextBox" runat="server" CSSClass="USBBox" />

然后您可以使用 jQuery 的类选择器来访问文本框,而不必担心名称错误:

%('.USBBox')

如果您的页面上有很多元素,但您可能会更好地通过 id 访问,在这种情况下,请使用客户端 id 来避免任何名称混淆问题:

$('#<%= MyTextBox.ClientID %>')

更新

使用link 中提供的 CSS 解决方案对用户隐藏文本框。使用正确的解决方案更新了 USBBox CSS 类,设置为 display:none 导致 javaScript 问题。

【讨论】:

【参考方案3】:

附加到 MyTxtBox 的 onChange 事件。您需要做一些 ASP.NET 来生成适当的 ClientID 以在 JavaScript 中使用,因为 ASP.NET 会将 MyTxtBox ID 修改为其他内容。

<asp:TextBox id="MyTxtBox" runat="server" Visible="false" />
<script language="javascript" type="text/javascript">
    function MyFunction() 
        //execute this function when MyTxtBox is populated
    

    document.getElementById("<%= MyTxtBox.ClientID %>").onChange = MyFunction;
</script>

【讨论】:

如果元素保持焦点,onChange 会触发吗?如果 USB 滑动输入没有自动前进到下一个字段并且只是停留在字符串的末尾,浏览器会触发该 onchange 事件吗? @Anthony - 你是对的。除非焦点前进到下一个表单域,否则不会触发 onChange 事件。一旦文本框被填充,我需要触发事件。

以上是关于在 jQuery 中填充文本框时执行 javascript 函数?的主要内容,如果未能解决你的问题,请参考以下文章

选择组合框时填充文本框

当我输入一个文本框时,我会填充一些文本框

Access 2013:尝试使用表单中的数据填充文本框时收到错误消息“对象'_Recordset'的方法'打开'失败”

使用 jQuery 表单规则显示文本框时验证文本框

如何在 .NET 中继器控件中使用 JQuery 日期控件

单击文本框时会触发哪个 javascript 事件?