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