JavaScript wird doppelt ausgeführt
am 16.10.2014 - 18:44 Uhr in
Hallo FOrum,
ich habe den Spaß mit dem laden eines Nodes via Ajax fast gelöst, aktuell wird nur leider mein JavScript (jQuery-Code) mit jedem Click häufiger ausgeführt, vielleicht schaut von euch mal jemand mit drauf:
Ich vermute, es liegt daran, das bei jedem Ajax-Node-Reload die JavaScript-Datei mit folgendem Code erneut und zusätzlich geladen wird:
Hier der JavaScript-Part (ist über das Theme eingebunden):
[code]
(function ($).
{
Drupal.behaviors.ajaxsuche =.
{
attach:function(context,settings)
{
var old = null;
$('.search-result').on('click',function(e)
{
console.log(this);
if (old!=null)
{
$(old).removeClass('search-result-check');
}
old=this;
$(this).addClass('search-result-check');
e.preventDefault();//verhindert den eigentlich Link
//console.log($('.title a',this).attr('href'));
var nodeid_string = $('a',this).attr('href');
var nodeid = nodeid_string.replace(/\D/g,'');
$('.l-region--detail').text(nodeid);
//$('.l-region--detail').load('http://fw701/drupalversion/ajaxmodul/'+nodeid); klappt auch,jedoch gleicher Doppel-Fehler
$.ajax(
{
url: 'http://fw701/drupaversion/ajaxmodul/'+nodeid,
success: function(response,status)
{
$('.l-region--detail').html(response);
}
});
});
}
};
})(jQuery);
[/code]
Und hier eventuell der Code der mir den Node liefert (das mache ich über ein extra Modul):
[code]
function ajaxmodul_menu()
{
$items = array();
$items['ajaxmodul'] = array(
'type' => MENU_CALLBACK,
'page callback' => 'loadsearchednode',
'page arguments' => array(1),
'access arguments' => array('access content'),
'access callback' => TRUE,
'delivery callback' => 'ajax_callback',
);
return $items;
}
function loadsearchednode($nodeid)
{
$node = node_load($nodeid);
return node_view($node);
}
function ajax_callback($page_callback_result) {
// Only render content
$content = drupal_render($page_callback_result);
// Add CSS ans JS files, add some markup
$html = '' . drupal_get_css() . drupal_get_js() . '' . $content . '';
print $html;
// Perform end-of-request tasks.
drupal_page_footer();
}
[/code]
Über drupal_get_css und drupal_get_js werden die Files ja immer mit geladen, aber ich brauche diese ja nur einmal und nicht xFach. Vielleicht kennt von euch jemand das Problem.
vielen Dank für eure Hilfe.
- Anmelden oder Registrieren um Kommentare zu schreiben

Hi, also die erste Dopplung
am 17.10.2014 - 06:31 Uhr
Hi,
also die erste Dopplung habe ich verhindert (siehe Code und http://codekarate.com/blog/drupal-7-prevent-duplicating-javascript-behav...), leider lädt meine Implementierung immer noch den Javascript-Code doppelt hinein und scheint diesen somit auch mehrfach auszuführen.
Wie kann ich im Omega-Theme eine Javascript-Datei lediglich einem Layout zuweisen?
mit bestem Gruß
Tim
(function ($)
{
Drupal.behaviors.ajaxsuche =.
{
attach:function(context,settings)
{
var old = null;
if(context == document) //verhindert das doppelte Ausführen des Codes) siehe http://codekarate.com/blog/drupal-7-prevent-duplicating-javascript-behav...
{
$('.search-result').on('click',function(e)
{
console.log(this);
if (old!=null)
{
$(old).removeClass('search-result-check');
}
old=this;
$(this).addClass('search-result-check');
e.preventDefault();//verhindert den eigentlich Link
//console.log($('.title a',this).attr('href'));
var nodeid_string = $('a',this).attr('href');
var nodeid = nodeid_string.replace(/\D/g,'');
$('.l-region--detail').text(nodeid);
//$('.l-region--detail').load('http://fw701/drupalversion/ajaxmodul/'+nodeid); klappt auch,jedoch gleicher Doppel-Fehler
$.ajax(
{
url: 'http://fw701/drupalversion/ajaxmodul/'+nodeid,
success: function(response,status)
{
$('.l-region--detail').html(response);
}
});
});
}
};
}
})(jQuery);
Hi, also dass das JavaScript
am 17.10.2014 - 10:24 Uhr
Hi,
also dass das JavaScript nur einem Layout des Themes zugewiesen wird ist über die layoutname.layout.inc eingestellt.
Leider bewirkt das immer noch nicht das der Code nur einmal ausgeführt wird sondern immer doppelt so oft wie beim Vorgänger.
Ich bin für jeden Rat dankbar.
mfg
Tim
Ich habe die
am 17.10.2014 - 11:02 Uhr
Ich habe die JavaScript-Funktion jetzt nochmal Stück für Stück aufgebohrt. Das Problem wird lediglich durch die Ajax-Funktion verursacht. Erst nachdem der Response in meinem DOM eingebaut ist gibt es die Probleme.
mfg
Tim