【问题标题】:jquerymobile conflict with autocomplete : $this.attr("href") is undefinedjquerymobile 与自动完成冲突:$this.attr("href") 未定义
【发布时间】:2010-12-14 08:59:31
【问题描述】:

当我将 jquery ui 自动完成版本 1.8.5 与 jquery mobile alpha 2 一起使用时。 单击自动完成列表中的项目时出现错误:

$this.attr("href") 未定义。

有没有人知道解决办法?

编辑:

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.8.custom.css">
        <link rel="stylesheet" type="text/css" href="css/autocomplete.css">
    </head>
    <body>

        <div id="formWrap">
            <form id="messageForm" action="#">
                <fieldset>
                    <label id="toLabel">select:</label>
                    <div id="friends" class="ui-helper-clearfix">

                        <input id="to" type="text">
                    </div>

                </fieldset>
            </form>
        </div>
        <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="js/jquery.mobile-1.0a2.js"></script>
        <script type="text/javascript" src="js/jquery-ui-1.8.custom.min.js"></script>


        <script type="text/javascript">
            $(function(){

                var availableTags = [
                        "ActionScript",
                        "AppleScript",
                        "Asp",
                        "BASIC",
                        "C",
                        "C++",
                        "Clojure",
                        "COBOL",
                        "ColdFusion",
                        "Erlang",
                        "Fortran",
                        "Groovy",
                        "Haskell",
                        "Java",
                        "JavaScript",
                        "Lisp",
                        "Perl",
                        "PHP",
                        "Python",
                        "Ruby",
                        "Scala",
                        "Scheme"
                    ];


                //attach autocomplete
                $("#to").autocomplete({             

                    source:availableTags
                    ,

                    //define select handler
                    select: function(e, ui) {
                        var contact = ui.item.value;
                        createSpan(contact);
                        $("#to").val("").css("top", 2);
                        return false;
                    }           
                });

                });

            function createSpan(contact){
                //create formatted friend               
                span = $("<span>").text(contact)            
                //add contact to contact div
                span.insertBefore("#to");
            }
        </script>

    </body>
</html>

【问题讨论】:

  • 链接到显示它正在发生的页面会很有帮助
  • 无法发送网址,因为我在本地工作。代码很长。示例可以是任何简单的 jquery 自动完成功能,其中包括“jquery.mobile-1.0a2.js”。

标签: jquery jquery-autocomplete jquery-mobile


【解决方案1】:

修改 jquery.mobile-1.0a2.js:添加了一个检查以查看 href 是否未定义 代码里面

  $( "a" ).live( "click", function(event) { 
           //( START: My added code) 
            if($(this).attr( "href" )==undefined){
                //for links created for interaction - ignore
                return false;
            }
           //( END: My added code) 
   //Remaining code follows

这解决了问题。

【讨论】:

    【解决方案2】:

    嘿,亲爱的,感谢您为我指明了正确的方向。

    我发现最好覆盖 jquery ui 代码而不是直接修改 jquery 移动源代码(为了可维护性)。以下覆盖了呈现自动完成列表中每个项目的 jquery-ui 方法;它将值为“#”的 href 属性添加到正在创建的锚元素。这应该可以防止未定义的 href 错误:

    $('#to').data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( $( "<a></a>" ).attr({href: '#'}).html( item.label ) )
        .appendTo( ul );
    

    }

    【讨论】:

      【解决方案3】:

      $(this) 不是$this

      【讨论】:

      • 没有。 jquery.mobile-1.0a2.js 中的 var $this = $(this)。
      猜你喜欢
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多