2017-01-05 3 views
1

Ich habe Code, der zwei Reihen von farbigen Eingängen des Typs Bild zeigt. Wenn auf eine der Eingaben geklickt wird, wird sie mit einem Schatten markiert und der Schatten auf der zuvor angeklickten Eingabe wird entfernt. Diese jsfiddle zeigt, dass es als Nicht-Ajax-Code funktioniert.Aktualisierung div bei Verwendung von AJAX

Aber das muss mit Ajax funktionieren. Ich habe eine jsfiddle Setup versucht, dies zu zeigen, aber es funktioniert nicht, so dass ich wahrscheinlich nicht den Ajax-Code richtig eingerichtet haben. Aber der Ajax funktioniert hier lokal. In meinem lokalen Setup ist die angeklickte Eingabe wie vorgesehen schattiert, aber die zuvor angeklickte Eingabe bleibt schattiert.

Ich habe einen Beitrag gefunden, der besagt, dass das div aktualisiert werden muss, also fügte ich Folgendes hinzu, aber das div verschwand einfach.

$("#group_one").load(location.href + "#group_one"); 

Hier ist der vollständige Code. Kann mir bitte jemand helfen?

<style> 
     .imgStr {display:inline-block } 
    .selected{ box-shadow:0px 12px 22px 1px #333;} 
    div.shadow { border: 0px solid #3DA1D2; padding: 10px; } 
    div.shadow:hover { 
     -moz-box-shadow: 0 0 5px rgba(61,161,210,0.5); 
     -webkit-box-shadow: 0 0 5px rgba(61,161,210,0.5); 
     box-shadow: 0 0 15px rgba(61,161,210,0.5); 
    } 
    </style> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <div><img src="outside.img"></div> 

    <form method="post" action="/echo/html/" ajax="true"> 
    <div class='container' id="group_one"> 
     <div class="imgStr shadow" style="background:red"> 
     <input id="red_1" class="imgInput selected" name="img_front_group" value="red" type="image" src="red.gif"> 
     </div> 
     <div class="imgStr shadow" style="background:yellow"> 
     <input id="yellow_1" class="imgInput" name="img_front_group" value="yellow" type="image" src="yellow.gif"> 
     </div> 
     <div class="imgStr shadow" style="background:white"> 
     <input id="white_1" class="imgInput" name="img_front_group" value="white" type="image" src="white.gif"> 
     </div> 
    </div> 

    <div class='container' id="group_two"> 
     <div class="imgStr shadow" style="background:red"> 
     <input id="red_2" class="imgInput selected" name="img_front_group" value="red" type="image" src="red.gif"> 
     </div> 
     <div class="imgStr shadow" style="background:yellow"> 
     <input id="yellow_2" class="imgInput" name="img_front_group" value="yellow" type="image" src="yellow.gif"> 
     </div> 
     <div class="imgStr shadow" style="background:white"> 
     <input id="white_2" class="imgInput" name="img_front_group" value="white" type="image" src="white.gif"> 
     </div> 
     <div id="showid"></div> 


    <script> 
    var last_selected; 

    $("input").click(function(){ 
     var current_selected = $(this).closest('.container').find(".selected"); 
     $("#showid").text('previous selected = '+current_selected.attr('id')); 

     $(this).closest('.container').find(".selected").removeClass('selected'); 
     $(this).addClass("selected"); 
    }); 
    </script 
+0

'$ ("# group_one") Last (location.href + "#group_one");' wird _the gesamten Seite_ zurückkehren - Hinzufügen der # am Ende sagt nur einen Browser zu diesem Anker zu bewegen, wenn es ist fertig geladen. Aber da du Ajax verwendest, das nicht zutrifft, versucht es wahrscheinlich, eine ganze HTML-Seite in dein div zu laden, was nicht gültig ist. Sie benötigen eine serverseitige URL, die Ihnen nur den Inhalt des von Ihnen angeforderten div zurückgibt. – ADyson

+0

1. Das Markup ist ungültig (fehlende schließende Tags) 2. Es gibt kein "ajax" im Skript (außer 'ajax =" true "' was absolut nichts tut) 3. Das schließende Script-Tag ist defekt 4. Es gibt no '.load (...)' im Skript – Andreas

+0

Ich bin verwirrt über den Fluss des Codes. In der ersten Datei ändert sich der Schatten mit jedem Klick mit der Onclick-Funktion. Im zweiten Fall wird dasselbe durchgeführt, aber nicht zurückgesetzt. Wenn ich das so belasse und das div mit allen Eingaben neu lade, verliere ich den ausgewählten Gegenstand. Muss ich das irgendwie in der Onclick-Funktion speichern und dann die Reload-Funktion mit diesem Wert aufrufen? Das Div ist innerhalb einer Funktion und sein Inhalt variiert mit den Calling-Optionen, etwa so: – user3052443

Antwort

0

Ich verstand, was Sie über die Jfiddle sagten, aber ich wusste nicht, wie es geht. Ich habe endlich ein Beispiel gefunden, das funktioniert, glaube ich. Hier ist das aktualisierte jsfiddle. Aus irgendeinem Grund funktioniert es nur in FF und Chrome. Und es hat die Fähigkeit verloren, das ausgewählte Objekt anzuzeigen. Die ursprüngliche Datei und mein Code hier funktioniert in dieser Hinsicht gut, so ist es etwas mit dieser neuen jsfiddle, die das Problem verursacht, aber ich weiß nicht, wie das zu beheben.

Für diese neue jsfiddle muss ich in der Lage sein, auf einen der Eingänge zu klicken und es ausgewählt haben (zeigt durch einen Schatten um es). Wenn dann auf eine andere Eingabe in dieser Zeile geklickt wird, bewegt sich der Schatten dorthin. Ich hoffe, dass dies hilft, das Problem zu sehen. .

<style> 
    .imgStr {display:inline-block } 
    .selected{ box-shadow:0px 12px 22px 1px #333;} 
    div.shadow { border: 0px solid #3DA1D2; padding: 10px; } 
    div.shadow:hover { 
     -moz-box-shadow: 0 0 5px rgba(61,161,210,0.5); 
     -webkit-box-shadow: 0 0 5px rgba(61,161,210,0.5); 
     box-shadow: 0 0 15px rgba(61,161,210,0.5); 
    } 
    </style> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <div id="showform"></div> 
    <script> 

    function ShowForm() { 
     $.ajax({ 
     url: 'ajax2.php', 
     success: function(data) { 

      $("#showform").html(` 
      <div class="container" id="group_one"> 
       <div class="imgStr shadow" style="background:red"> 
       <input id="red_1" class="imgInput selected" name="img_front_group" value="red" type="image" src="red.gif"> 
       </div> 
       <div class="imgStr shadow" style="background:yellow"> 
       <input id="yellow_1" class="imgInput" name="img_front_group" value="yellow" type="image" src="yellow.gif"> 
       </div> 
       <div class="imgStr shadow" style="background:white"> 
       <input id="white_1" class="imgInput" name="img_front_group" value="white" type="image" src="white.gif"> 
       </div> 
      </div> 

      <div class="container" id="group_two"> 
       <div class="imgStr shadow" style="background:red"> 
       <input id="red_2" class="imgInput selected" name="img_front_group" value="red" type="image" src="red.gif"> 
       </div> 
       <div class="imgStr shadow" style="background:yellow"> 
       <input id="yellow_2" class="imgInput" name="img_front_group" value="yellow" type="image" src="yellow.gif"> 
       </div> 
       <div class="imgStr shadow" style="background:white"> 
       <input id="white_2" class="imgInput" name="img_front_group" value="white" type="image" src="white.gif"> 
       </div> 
      <div id="showid"></div>   
      `); 
      } 
     }); 
    }; 

    $(document).ready(function() { 
     ShowForm(); 

     $("input").click(function(){ 
     var current_selected = $(this).closest(".container").find(".selected"); 
     $("#showid").text("previous selected = "+current_selected.attr("id")); 
     $(this).closest(".container").find(".selected").removeClass("selected"); 
     $(this).addClass("selected"); 
     });  
    }); 
    </script> 
Verwandte Themen