Carsten: Alert - Fenster einbinden

Hallo,

ich habe unter PHP folgende Java-Script Anweisung:

	$(\'#projectFilter\').on(\'change\', function() {
			var location = "' . get_page_base_url('leads') . '";
			var project_id = $("#projectFilter").val();
			if (project_id != 0) {
     		
				location = location + "?project_id=" + project_id;
               
			}	
			window.location.href = location;
			return false;
		});

Nun möchte ich dort beo on chance zusätzlich ein Alert mit einem Hinweis "Gewechselt!". Wie und wo muss ich das einbinden?

Vielen Dank.

  1. Tach!

    Nun möchte ich dort beo on chance zusätzlich ein Alert mit einem Hinweis "Gewechselt!".

    Schön ist das nicht unbedingt.

    Wie und wo muss ich das einbinden?

    Jedenfalls einfach aufrufen, vor der Zeile

    window.location.href = location;

    denn die veranlasst den Browser eine andere Seite zu laden. Was danach steht, wird nicht mehr ausgeführt.

    dedlfix.

  2. Hallo Carsten,

    gehe ich recht in der Annahme, dass Du das im PHP mit ECHO ausgibst? Ich vermute das deshalb, weil Du die ' mit einem Backslash escapest.

    Stringkontextwechsel sind eine mühsame Sache, und es ist sehr fehlerträchtig, mit ECHO einen PHP String auszugeben, der ein JavaScript mit String enthält. Besser ist es, den PHP Kontext dafür zu verlassen.

    <?php
       ...
       echo '$(\'foo\').bar();';
       ...
    

    Das $ ist kein Problem, weil es ein 'string' und kein "string" ist, aber das Escapen der ' ist unübersichtlich.

    Etwas besser: ein Nowdoc-String:

    <?php
       ...
       echo <<<'END'
    $('foo').bar();'
    END;
       ...
    

    Deutlich besser: Verlasse für die Script-Ausgabe den PHP Kontext

    <?php
       ...
    ?>
       $('foo').bar();'
    <?php
       ...
    

    Kein Escaping der Hochkomma mehr nötig, und ein guter Editor kann jetzt korrektes Syntax-Highlighting betreiben.

    Dann kannst Du nach Bedarf auch Variablen aus PHP einsteuern, dazu dient <?= ... ?>:

    <?php
       ...
    ?>
       var location = "<?= get_page_base_url('leads') ?>";
    <?php
       ...
    

    Zu deinem JavaScript selbst: Die Funktion, die Du als Eventhandler registrierst, bekommt einen Parameter. Dieser Parameter ist das Event-Objekt, das hat eine Eigenschaft namens target. Darin findest Du das DOM Element, das sich geändert hat, und kannst darin die value Eigenschaft abfragen. D.h. du musst das geänderte Element nicht erneut mit $('...') suchen.

    	$('#projectFilter').on('change', function(event) {
    			var location = "<?= get_page_base_url('leads') ?>";
    			var project_id = event.target.value;
    			if (project_id != 0) {
    				location += "?project_id=" + project_id;
    			}	
    			window.location.href = location;
    			return false;
    	});
    

    Rolf

    --
    sumpsi - posui - obstruxi
  3. Lieber Carsten,

    Nun möchte ich dort beo on chance zusätzlich ein Alert mit einem Hinweis "Gewechselt!".

    warum? Wird das vielleicht für den Besucher nicht immer offensichtlich?

    Das modale Dialogfenster, welches das native alert() erzeugt, ist eine sehr schlechte Lösung mit vielen Nachteilen. Eine zugängliche Dialogbox ist sinnvoller.

    Liebe Grüße

    Felix Riesterer

    1. Lieber Felix,

      Eine zugängliche Dialogbox ist sinnvoller.

      wenn sie denn funktionieren würde! Offensichtlich wird die Methode <dialog>.show() mittlerweile unterstützt, setzt aber im open-Attribut keinen Wert, so dass der Selector dialog[open="open"] zu spezifisch ist und auf das hier verkürzt werden muss: dialog[open]. Ich habe die Änderungen an den Beispielen im Wiki durchgeführt.

      Liebe Grüße

      Felix Riesterer