2016-07-22 22 views
1

Ich habe ein großes Upload-Formular, der Benutzer kann Bilder hier ziehen und ablegen. Aber wenn Bilder geladen werden, zeige ich Button, der beim Klicken auf eine Seite verlinken sollte. Aber dieses Element, anstatt die nächste Seite zu laden, öffnet das Dateiauswahlfenster (sein übergeordnetes Standardverhalten)Eltern-Ereignisse beim Klicken deaktivieren, aber Kindern erlauben, eigene Ereignisse zu verwalten

Also ich überprüfe, ob Ereignis Klasse hat, wenn es wahr ist, verwende ich e.preventDefault().

Und das funktioniert besser (Ich habe kein Bild Fenster auf Link klicken klicken, aber auch dieser Link wird nicht funktionieren - jedes Ereignis ist deaktiviert) Meine Frage ist, wie kann ich jetzt die Verknüpfung aktivieren?

// jFiler is a parent - upload form, with event - on click it opens window for file choose - like input field. 
$(document).on('click', '.jFiler', function(e) { 
    if ($(event.target).hasClass("jFiler-input-done-btn")) { 
     e.stopPropagation(); 
     e.preventDefault(); 
    } 
}); 

$('.jFiler-input-done-btn').on('click',function(e) { 
    // Test works, but this is a link, and it cannot link to another page now... 
    alert ('test') 
}); 
+1

Verwenden Sie nur 'e.stopPropagation();' keine Notwendigkeit für 'e.preventDefault();'. weil es Link-Aktion verhindert. –

+0

Der 'Alarm ('Test') 'erreicht ?? –

+0

Ich verstehe nicht wirklich das Problem oder was funktioniert und was nicht. Können Sie uns mehr Informationen/einen Test geben? – eisbehr

Antwort

1

Sie brechen den Link Ausführung mit e.stopPropagation() und e.preventDefault() in der Mutter click Ereignis. Sie müssen nur true dort zurückgeben.

$(document).on('click', '.jFiler', function(e) { 
    if($(event.target).hasClass("jFiler-input-done-btn")) { 
     return true; 
    } 
}); 
+0

Das funktioniert ähnlich wie e.stopPropagation(); aber wie oben erwähnt, funktioniert es jetzt (Link geht zu einer anderen Seite), aber Uplaod wählt Fenster appes für 1 sek. Sieht so aus, als ob das Elternereignis ausgelöst wird, aber der Link funktioniert auch, also sehe ich dieses Fenster nur zu der Zeit, wenn eine neue Seite geladen wird. – user3573535

+0

Können Sie uns das ganze '$ (document) .on ('click', '.jFiler', function (e) {}) zeigen?' Funktion? – eisbehr

1

einfach auf die andere Seite innerhalb des Click-Ereignis umleiten Sie bereits anhängen:

$('.jFiler-input-done-btn').on('click',function(e) { 
    windows.location.href = $(this).attr('href'); 
}); 

//OR also 

$('.jFiler-input-done-btn').on('click',function(e) { 
    e.stopPropagation(); 
}); 

Hoffnung, das hilft.

+0

Ja, ich weiß über Redirect, aber es ist Teil der größeren App, und im besten Fall sollte dies von reinem HTML getan werden. Aber danke für die gute Idee. – user3573535

+0

ist das möglich, dass dieser Code Problem gelöst? Funktioniert gut für mich, jetzt auf Klick auf Button, Eltern-Event wird nicht ausgelöst ...? $ ('. JFiler-Input-done-btn'). On ('Klick', Funktion (e) { e.stopPropagation (); }); – user3573535

+1

Ja, dass das '' e.stopPropagation(); 'inside click Event des Links' .jFiler-input-done-btn' auch den Trick machen sollte. –