`
JohnSmith1990
  • 浏览: 1864 次
社区版块
存档分类
最新评论

【整合】input标签JS改变Value事件处理方法

阅读更多
某人需要在时间控件给文本框赋值时,触发事件函数。实现的效果:

  1、文本框支持手工输入,通过用户输入修改值,手工输入结束后触发事件。阻塞在于失去焦点后才触发(输入过程中不触发事件)

  2、通过JS方法修改值,修改后触发事件。重点阻塞在于此(JS赋值要触发)

  

  最终采用方案:

  1、IE(IE8及以下)下使用onpropertychange实现JS赋值后触发事件

  2、需求是手工输入结束后才触发事件,避免在文本框实时输入文字的时候也因为onpropertychange触发事件,在trigger之前判断当前焦点位置。这样onpropertychange就对手工输入无效;

  3、实现手工输入结束后要触发事件,使用onchange事件



  1、其他浏览器中也可以使用onchange模拟输入结束后触发事件,但是没法使用onpropertychange事件。使用定时器模拟效果

  

复制代码
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type"; content="text/html; charset=utf-8">
<script type="text/javascript" src="jquery-1.9.1.min.js" charset="utf-8"></script>
<script>
function init(){
    //每次点击给不一样的值
    var i=0;
    $("#testchange").on("click",function(){
        $("#name").val(i);
        i++;
    });
    var jsDate = "";
   
    if(document.all){//ie8及以下
        $("#name").on("change",function(){
            console.log(i);//改变值后要触发的代码
        });
       
        $('input[type="text"]').each(function() {
            var that=this;
            if(this.attachEvent) {
                this.attachEvent('onpropertychange',function(e) {
                    if($("#name").is(":focus")) return;
                    if(e.propertyName!='value') return;
                    debugger;
                    $(that).trigger('change');
                });
            }
        })
    } else {//非ie和IE9以上
        var intervalName;
        intervalName = setInterval(handle,100);
        function handle(){
            if($("#name").val() != jsDate && !$("#name").is(":focus")){//模拟失去焦点后时才会触发
                jsDate = $("#name").val();
                console.log(i + " oninput");//改变值后要触发的代码
            }
        };
    }
}
</script>
</head>
<body onload ="init();">
    <button id="testchange">JS赋值</button>
    <label>文本框:</label><input type="text" id="name"/>
</body>
</html>
复制代码




总结对比在input标签中onchange、oninput、onpropertychange对比

onchange:老东西,基本兼容所有浏览器。实现原理为元素得到焦点后开始监听Value,元素失去焦点后对比前后的Value,前后Value不相等时触发。

      适用场景为:输入内容失去焦点后,才触发事件的场景

      注:在查资料的过程中看到有的地方说onchange在非IE8以下的浏览器中会实时监听文本变化,但是我在实际测试中发现并没有实时监听,此处有问题货错误还请指教 :-D

        或者是Jquery的锅? 我测试的代码为  $("#id").on("change",function());

oninput:html5的标准标签。实现机制为实时监听文本框变化,有变化就触发事件,这个效果在用中文输入法时很奇怪,具体的以后有时间研究。

      适用场景为:文本框输入过程中实时监听输入内容,触发事件

onpropertychange:IE中元素特有的属性,直接在底层监听元素的属性变化(不止是Value),任何变化都会触发事件,包括适用JS操作

      适用场景为:页面运行期间实时监听元素属性变化,触发事件,特别适用于在IE中JS操作触发事件的场景





后记:项目原需求的实现其实最好是在控件里面更改,这里做了个奇怪的东西~  权当学习



参考:

change,propertychange,input事件小议

http://www.cnblogs.com/AndyWithPassion/archive/2011/12/18/change_propertychange_input.html



javascript开发中使用onpropertychange,oninput事件解决onchange事件的不足

http://www.jb51.net/article/25275.htm



总结oninput、onchange与onpropertychange事件的用法和区别

http://blog.csdn.net/freshlover/article/details/39050609



实时监听输入框值变化的完美方案:oninput & onpropertychange

http://www.cnblogs.com/lhb25/archive/2012/11/30/oninput-and-onpropertychange-event-for-input.html

分享到:
评论

相关推荐

    [js]javascript事件集合(包有触发事件)终版.pdf

    JavaScript事件处理程序的编写方式可以是自定义函数,也可以是内置函数,或者直接写入JavaScript代码。理解并熟练应用这些事件是创建交互式网页的关键,它们为用户提供了一种与网页进行沟通的方式,提高了用户体验。

    input标准美化

    1. **CSS样式**:通过CSS,我们可以改变`&lt;input&gt;`标签的样式,如边框、背景色、字体、大小、内边距等。例如: ```css input { border: 1px solid #ccc; padding: 5px; font-size: 14px; border-radius: 5px; } `...

    使用js正则控制input标签只允许输入的值

    通过JavaScript正则表达式,可以拦截input标签中的键盘事件,并将不符合要求的字符过滤掉。例如,使用正则表达式`/\D+/g`可以匹配所有的非数字字符,并将其替换为空字符串,从而实现只允许输入数字的效果。代码示例...

    jquery与struts2整合

    在Web开发中,jQuery是一个强大的JavaScript库,它简化了JavaScript的DOM操作、事件处理和Ajax交互。Struts2是一个流行的Java Web框架,用于构建MVC(Model-View-Controller)架构的应用程序。将jQuery与Struts2整合...

    javascript 滑动条效果

    三、JavaScript事件处理 JavaScript主要负责监听滑动条的改变事件,并根据滑动条的位置执行相应的操作。我们可以使用`addEventListener`方法来添加事件监听器: ```javascript const slider = document....

    JS方法全写的表单验证

    本示例“JS方法全写的表单验证”提供了一个全面的JavaScript实现,用于对常见表单字段进行验证。下面我们将深入探讨这个主题,以及如何利用JavaScript进行表单验证。 首先,表单验证可以分为前端验证和后端验证。...

    大名鼎鼎SWFUpload- Flash+JS 上传

     SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统&lt;input type="file" /&gt;标签的文件上传模式。 [编辑本段]SWFUpload...

    javascript动态创建链接的方法.docx

    此外,JavaScript还提供了其他方法来处理链接,比如通过`querySelector`和`querySelectorAll`获取特定链接,或者使用`createAttribute`和`setAttributeNode`来设置属性。了解这些方法有助于在实际项目中更灵活地操作...

    SSH+DWR整合,有图片,有实例,有说明,非常详细

    4. **配置Spring:** 如果你的项目已经使用了Spring框架,你需要将DWR的配置整合到Spring的配置文件中,例如通过`&lt;bean&gt;`标签创建DWR的相关bean。 5. **生成JavaScript接口:** DWR会自动生成JavaScript库,使得...

    Spring MVC websocket整合

    在前端,我们可以使用JavaScript库如Stomp.js和SockJS.js来建立WebSocket连接并发送/接收消息。以下是一个简单的示例: ```html &lt;!DOCTYPE html&gt; ...

    实验2-开始JavaScript编程.docx

    - 实验中涉及了根据用户选择(性别)动态显示不同输入项的功能,这需要使用到JavaScript事件处理和DOM操作。 - `getElementById()`函数用于获取HTML文档中具有特定ID的元素,然后可以通过`.style.display`属性来...

    ecshop整合替换百度编辑器 ueditor,测试通过

    $editor-&gt;Value = $input_value; $FCKeditor = $editor-&gt;CreateHtml(); $smarty-&gt;assign('FCKeditor', $FCKeditor); } 修改为: /** * 生成编辑器 * @param string input_name 输入框名称 * @...

    js计算文本域剩余字数

    为了实时更新剩余字数,我们需要监听文本域的`input`事件,这样每次用户输入或删除文字时都会触发。可以使用`addEventListener`来添加事件监听器: ```javascript textarea.addEventListener('input', function()...

    1_html_fewernof_js_

    var selectedDate = dateInput.value; console.log(selectedDate); ``` 如果“fewernof”代表某种库或框架,那么它可能提供了一些额外的功能,如自定义样式、更复杂的交互或者错误处理。然而,由于没有具体的文件名...

    基于microsoftTranslator实现js中英文转换

    调用`translate`方法,传入这些参数,然后处理返回的结果: ```javascript async function translateText(text, sourceLang, targetLang) { try { const result = await client.translate([text], sourceLang, ...

    js颜色拾取器

    5. **事件处理**:当用户选择新颜色时,颜色拾取器会触发一个事件,通常为`change`事件。开发者可以通过监听这个事件来获取当前颜色值,并更新相关元素的样式。 6. **颜色值的获取与设置**:`jscolor`库提供了方法...

    javascript 禁用button 10秒钟

    在探讨“javascript禁用button 10秒钟”的技术细节前,我们先理解这一需求的核心——在用户界面上,为了防止用户连续点击按钮导致不必要的请求或操作,或是为了确保用户有足够的时间阅读某些重要信息(如服务条款)...

    一个完美的js表单验证案例

    jQuery作为一个轻量级的JavaScript库,简化了DOM操作,动画效果,事件处理以及Ajax交互,使得编写复杂的表单验证代码变得更加简洁。 这个案例中,我们可能会看到以下关键知识点: 1. **jQuery选择器**:jQuery提供...

    jQuery颜色选择器插件jColor.js.zip

    jQuery是一个高效、简洁且易用的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计以及Ajax交互。通过使用jQuery,开发者可以减少代码量,提高代码的可读性和可维护性。 jColor.js插件的核心功能是提供一个...

    jsp fckeditor 整合 实例

    &lt;script src="&lt;s:url value="/fckeditor/fckeditor.js"/&gt;" type="text/javascript"&gt; &lt;script type="text/javascript"&gt; window.onload = function() { var oFCKeditor = new FCKeditor( 'editor' ) ; oFCKeditor....

Global site tag (gtag.js) - Google Analytics