none
原生IE8下面对input赋值后,紧接着一次的 onpropertychange 不会触发,后续的会触发,这是bug吗,怎么解决? RRS feed

  • 问题

  • 原生IE8下面对input赋值后,紧接着一次的 onpropertychange 不会触发,后续的会触发,这是bug吗,怎么解决?

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>原生IE8下propertychange的bug</title>
        <script src="jquery-old.js"></script>
        <script>
            $(function () {
                //字数长度限制3个
                function maxlength(val) {
                    if (val == undefined || val === null) return null;
                    if (val.length > 3) {
                        val = val.substr(0, 3);
                    }
                    return val;
                }
    
                var myInput = $("#myInput");
                var mySpan = $("#mySpan");
                myInput.bind('propertychange', function (e) {
                    if (e.propertyName == "value" || window.event.propertyName == "value") {
                        console.log('propertychange');
                        var cv = myInput.val();
                        var newValue = maxlength(cv);
                        if (cv != newValue) {
    						// 对input赋值后紧接着一次的 onpropertychange 不会触发,后续的会触发
                            myInput.get(0).value=newValue;
                        }
                        mySpan.html(newValue);
                    }
                });
            });
    
        </script>
    </head>
    <body>
        <input id="myInput" />
        <br />
        <span id="mySpan"></span>
    </body>
    </html>
    

    2015年8月21日 11:14

全部回复

  • 你好,

    你可以尝试用下面的代码:

    <head>
        <script type="text/javascript">
                // Firefox, Google Chrome, Opera, Safari, Internet Explorer from version 9
        
                // Internet Explorer
            function OnPropChanged(event){
                if (event.propertyName.toLowerCase () == "value") {
                    alert ("The new content: " + event.srcElement.value);
                }
            }
            
        </script>
    </head>
    <body>
        Please modify the contents of the text field.
        <input type="text"  onpropertychange="OnPropChanged(event)" value="Text field" />
    </body>

    另外,请参考这个类似的讨论:

    http://stackoverflow.com/questions/18436424/ie-onpropertychange-event-doesnt-fire

    希望对你有所帮助。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年8月24日 1:55
  • 您给的例子中,如果给input加上样式style="width:100%;"就不行了,width改成具体值才可以;

    另外如果input控件是通过js动态添加进body,例如$('body').html('<input type="text"  onpropertychange="OnPropChanged(event)" value="Text field" />');

    那么还是会出现onpropertychange失效的问题。

    请问怎么破?求高手指点。



    2015年9月1日 5:44