【问题标题】:jQuery - on change input textjQuery - 更改输入文本
【发布时间】:2012-05-13 09:08:10
【问题描述】:

我正在尝试创建一个函数,该函数将在 text input field 的值更改时执行。单击表格单元格时,字段的值会发生变化,而不是在keyup 上,也不是粘贴。我试过这样:

$("#kat").change(function(){ 
    alert("Hello");
});

我有文本字段:

<input type="text" id="kat" value="0"/>

但它不起作用。有什么帮助吗?

【问题讨论】:

  • 听起来你想附加到那个表格单元格的点击事件。
  • 点击表格单元格时值会发生变化是什么意思?
  • 我想通过将点击链接的值放在文本输入字段中来减少代码量,然后在该更改上执行一个函数,但最后我为每个点击事件创建了一个函数(22 个事件)...

标签: jquery onchange textinput


【解决方案1】:

这是来自 jQuery 文档页面上的评论:

在旧的 HTML5 之前的浏览器中,“keyup”绝对是您要寻找的。​​p>

在 HTML5 中,有一个新事件“input”,它的行为与您认为“change”应该表现的完全一样 - 只要按下一个键以将信息输入到表单中,它就会触发。

$('element').bind('input',function);

【讨论】:

    【解决方案2】:

    在我看来,您正在更新 javascript 中文本字段的值。 onchange 事件只会在您输入数据并跳出文本字段时触发。

    一种解决方法是在从脚本修改文本框值时触发文本框更改事件。见下文,

    $("#kat").change(function(){ 
        alert("Hello");
    });
    
    
    $('<tab_cell>').click (function () {
       $('#kat')
          .val($(this).text()) //updating the value of the textbox 
          .change();           //trigger change event.
    });
    

    【讨论】:

    • 我想通过将点击链接的值放在文本输入字段中来减少代码量,然后在该更改上执行一个函数,但最后我为每个点击事件创建了一个函数(22 个事件)...
    • @MarkoCakic 你的问题不清楚,贴出相关的 HTML 和 JS 以便我们帮忙。
    • 这是一种通过链接触发事件的非常酷的方式。谢谢!
    【解决方案3】:

    这项技术对我有用:

    $('#myInputFieldId').bind('input',function(){ 
                   alert("Hello");
        });
    

    请注意,根据this JQuery doc,建议使用“on”而不是在较新的版本中绑定。

    【讨论】:

      【解决方案4】:

      这对我有用

      var change_temp = "";
      $('#url_key').bind('keydown keyup',function(e){
          if(e.type == "keydown"){
              change_temp = $(this).val();
              return;
          }
          if($(this).val() != change_temp){
              // add the code to on change here 
          }
      
      });
      

      【讨论】:

        【解决方案5】:

        jQuery 文档说“如果您更改字段中的文本然后单击离开,它也会显示 [处理程序执行结果]。但是,如果字段在内容没有更改的情况下失去焦点,则不会触发事件。”。

        试试 keyup 和 keydown 事件,像这样:

        $("#kat").keydown(function(){ 
           alert("Hello");
        });
        

        【讨论】:

          【解决方案6】:
          function search() {
                  var query_value = $('input#search').val();
                  $('b#search-string').html(query_value);
                  if(query_value !== ''){
                      $.ajax({
                          type: "POST",
                          url: "search.php",
                          data: { query: query_value },
                          cache: false,
                          success: function(html){
                              //alert(html);
                              $("ul#results").html(html);
                          }
                      });
                  }return false;    
              }
          
              $("input#search").live("keyup", function(e) {
                  clearTimeout($.data(this, 'timer'));
          
                  var search_string = $(this).val();
          
                  if (search_string == '') {
                      $("ul#results").fadeOut();
                      $('h4#results-text').fadeOut();
                  }else{
                      $("ul#results").fadeIn();
                      $('h4#results-text').fadeIn();
                      $(this).data('timer', setTimeout(search, 100));
                  };
              });
          
          
          and the html 
          <input id="search" style="height:36px; font-size:13px;" type="text" class="form-control" placeholder="Enter Mobile Number or Email"  value="<?php echo stripcslashes($_REQUEST["string"]); ?>" name="string" />
                  <h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4>
                  <ul id="results"></ul>
          

          【讨论】:

            【解决方案7】:

            我最近想知道为什么我的代码不起作用,然后我意识到,我需要在加载文档后立即设置事件处理程序,否则当浏览器逐行加载代码时,它会加载 JavaScript,但是它还没有将事件处理程序分配给它的元素。 以你的例子,它应该是这样的:

            $(document).ready(function(){
                 $("#kat").change(function(){ 
                     alert("Hello");
                 });
            });
            

            【讨论】:

              【解决方案8】:

              这对我有用。如前所述,可能是浏览器问题,或者可能没有正确注册 jQuery,或者真正的问题可能更复杂(您制作了一个更简单的版本来问这个问题)。 PS - 必须点击文本框才能触发。

              http://jsfiddle.net/toddhd/Qt7fH/

              【讨论】:

                【解决方案9】:

                这适用于所有浏览器和 Jquery

                $('#kat').on('keyup', function () {
                    alert("Hello");
                });
                

                或者如你所愿

                $('#kat').on('click', function () {
                    alert("Hello");
                });
                

                文本框输入字段更改事件会按您的预期触发,jQuery .Change 事件仅在支持 html5 的浏览器上正常工作

                【讨论】:

                  【解决方案10】:

                  试试这个,

                  $('#kat').on('input',function(e){
                   alert('Hello')
                  });
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-06-26
                    • 2011-08-08
                    • 2010-12-09
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-02-17
                    • 2016-03-25
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多