检测文本输入的值是否在没有事件的情况下更改

时间:2012-01-27 15:26:51

标签: javascript jquery html

我希望获得此输入的值,如果它发生变化。我有一个map.swf,它根据用户在.swf中选择的内容来改变值,所以我想知道如何完成这项工作。

<a href="map.php" onclick='return GB_showCenter("",this.href,380,780);' class="page">See Map</a>
<input name="sector_e" type="text" id="sector_e" value="Please click The Map" size="1" readonly>

如果我按一个键,这个jQuery只会提醒我,我希望它在没有任何事件的情况下更改值时发出警报。

$('#sector_e').bind("keyup", function() {    
    alert($(this).val());
});

3 个答案:

答案 0 :(得分:2)

事件“改变”应该做你想做的事情:)

 $('#sector_e').bind("change", function() {

           alert($(this).val()); 

     });

编辑: 为了使其工作,swf还必须触发change事件。

如果无法做到这一点,您可以每隔n毫秒检查一次值是否有变化,并在这种情况下触发更改事件。

var checkChange function($object){
    var currentValue = $object.val();

    var checkChanges = function() {
        if (checkChanges.val() != currentValue) {
            currentValue = checkChanges.val();
            $object.trigger("change");
        }
    }

    window.setInterval(checkChanges, 100);
}

checkChange($('#sector_e'));

答案 1 :(得分:1)

你需要做一些事情的组合:

  1. 使用jQuery的data命令功能来保存初始值。
  2. 使用jQuery的focusoutblurchange事件检查当前值与使用data保存的内容。
  3. 即使您选择,也取决于是否可以直接进行用户交互。一旦检测到更改,就可以进行进一步处理。

    例如:
    您可以考虑使用jQuery的addClass命令将该元素标记为类似“isDirty”的类。

    然后你可以做以下事情:

    $('.isDirty')
    

    与此同时......

    这是使用FOCUSOUT的代码示例:

    <script type="text/javascript">
        $(document).ready(function () {
            var txtSectorE = $('#sector_e');
    
            // Save the initial value
            $.data(txtSectorE, "last", txtSectorE.val());
    
            // Setup the event
            txtSectorE.focusout(function () {
                var last = $.data(txtSectorE, "last");
                if (last != $(this).val())
                    alert("changed");
            });
        });
    </script>
    
    <input id="sector_e" name="sector_e" type="text" value="Please click The Map">
    

    当然,这样做是很费劲的,因为你必须为每个textbox写一套单独的电话。

    那么,为什么不为每个textbox添加一个类名,并这样做......

    使用FOCUSOUT更好的例子:

        <script type="text/javascript">
            $(document).ready(function () {
                var txtSectors = $('.sector');
    
                $.each(txtSectors, function (index, textbox) {
    
                    // Save the initial value
                    $.data(textbox, "last", textbox.val());
    
                    // Setup the event
                    textbox.focusout(function () {
                        var element = $(this);
                        var last = $.data(element, "last");
                        if (last != element.val())
                            alert("changed");
                    });
                });
            });
        </script>
    
    <input id="sector_a" type="text" class="sector" value="Something">
    <input id="sector_b" type="text" class="sector" value="Another">
    <input id="sector_c" type="text" class="sector" value="Yet Again">
    <input id="sector_d" type="text" class="sector" value="Wow This Arduous">
    <input id="sector_e" type="text" class="sector" value="Getting Tired Of Typing">
    

答案 2 :(得分:0)

如果文本输入的值发生更改(通过SWF或JS)时没有触发事件。 解决方案是使用计时器来不断检查文本输入的值。如果它不同于先前存储的值已经改变,那么你可以做你的事情。

(远非最佳但是解决方案)

请参阅此处了解实施:I want to trigger an event every single time data changes in an HTML text input field regardless of focus

setInterval( function() {
    $('input').each( function() {
        if ($(this).val() != $(this).data("_value")) {
            // Save the new value
            var myVal =  $(this).val();
            $(this).data("_value",myval);

            // TODO - Handle the changed value
        }
    });
}, 100);

来自@Plutor