29

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

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

我有文本字段:

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

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

4

10 回答 10

28

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

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

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

$('元素').bind('输入',函数);

于 2012-05-03T19:54:24.163 回答
9

在我看来,您正在更新 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.
});
于 2012-05-03T19:58:59.213 回答
9

这种技术对我有用:

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

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

于 2013-06-05T16:53:17.317 回答
5

这对我有用

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 
    }

});
于 2013-12-16T11:54:47.057 回答
4

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

尝试 keyup 和 keydown 事件,如下所示:

$("#kat").keydown(function(){ 
   alert("Hello");
});
于 2012-05-03T19:57:47.637 回答
3
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>
于 2014-05-08T12:08:53.063 回答
1

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

$(document).ready(function(){
     $("#kat").change(function(){ 
         alert("Hello");
     });
});
于 2016-06-29T16:15:32.063 回答
0

这适用于所有浏览器和 Jquery <= v1.10

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

或者如你所愿

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

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

于 2013-12-01T08:17:42.873 回答
0

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

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

于 2012-05-03T20:01:32.627 回答
0

尝试这个,

$('#kat').on('input',function(e){
 alert('Hello')
});
于 2015-09-07T11:58:51.633 回答