jquerymobile Konflikt mit der automatischen Vervollständigung: $ this.attr ( „href“) ist nicht definiert

StackOverflow https://stackoverflow.com/questions/4437419

Frage

Wenn ich jquery ui zur automatischen Vervollständigung Version 1.8.5 mit jQuery Mobile alpha 2. Ich erhalte eine Fehlermeldung, wenn ich einen Eintrag aus der Liste der automatischen Vervollständigung klicken:

$ this.attr ( "href") nicht definiert ist.

Wer weiß, jede Lösung für sie?

EDITED:

<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>
War es hilfreich?

Lösung

Modifizierte jquery.mobile-1.0a2.js: Es wurde eine Überprüfung, ob href undefiniert innerhalb des Code

  $( "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

Das das Problem behoben.

Andere Tipps

Hey Süßigkeiten, danke für mich in der richtigen Richtung.

Ich finde es besser ist, den jQuery UI-Code außer Kraft zu setzen, anstatt das jQuery Mobile Quellcode ändert direkt (aus Gründen der Wartbarkeit). Die folgenden überschreibt die jquery-ui-Methode, die jedes Element in der Liste zur automatischen Vervollständigung macht; sie fügt ein href Attribut mit dem Wert von ‚#‘ auf das Ankerelement geschaffen. Dies sollte die undefinierten href Fehler vermeiden:

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

}

$(this) nicht $this.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top