php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ?

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 03-08-2008, 12:03
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard onclick und Instanz

Hallo zusammen,

in meiner JS-Klasse erzeuge ich einen neuen Link mittels document.createElement('a'). Diesem Link möchte ich ein onclick zuweisen und zwar auf eine Funktion aus meiner JS-Klasse.

Hab bisher folgendes probiert:

PHP-Code:
function A() {
cancelLink.onclick this.cancelEditingNumber.apply(this);
}
this.cancelEditingNumber = function() {
this.currentEditedContainer.innerHTML this.lastEditedNumber;

Funktioniert nicht, weil mit dem apply das ja direkt aufgerufen wird. ein onclick=func(param) geht ja auch nicht, weil params nicht übergeben werden können.
Dann hab ich mal das bind aus prototype angeschaut und das hier gemacht:
PHP-Code:
cancelLink.onclick = function() {return this.cancelEditingNumber.apply(this);} 
Da bekomme ich dann this.cancelEditingNumber has no properties. Gleiches bei
PHP-Code:
cancelLink.onclick = function() {return cEN.apply(this);}
function 
cEN(inst) {
    
inst.cancelEditingNumber();

Langsam fallen mir keine Möglichkeiten mehr ein :-)

DANKE!!
Mit Zitat antworten
  #2 (permalink)  
Alt 03-08-2008, 15:52
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

kannst du mal den kompletten code dazu posten?

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 03-08-2008, 18:09
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
function cEN() {
    
this.cancelEditingNumber();
}

function 
Editor() {

    
this.editNumber = function(uniqueIDnumber) {

        
currentEditedContainer document.getElementById('edit-' uniqueID);
        
        
// create cancel button
        
var cancelLink document.createElement('a');
        
cancelLink.href 'javascript:void(0);';
        
cancelLink.innerHTML 'Abbrechen';
        
cancelLink.onclick = function() {return cEN.apply(this);}
        
currentEditedContainer.appendChild(cancelLink);
    
    }
    
    
this.hideEditing = function() {
    }
    
    
this.cancelEditingNumber = function() {
    
        
// remove all select boxes
        
        // remove buttons
        
        // write old value
    
}

Mit Zitat antworten
  #4 (permalink)  
Alt 03-08-2008, 18:16
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

du kannst hier nicht einfach auf die methode eines objektes zugreifen.
PHP-Code:
function cEN() {
    
this.cancelEditingNumber();

du musst zuerst eine referenz auf das objekt erzeugen.
PHP-Code:
function cEN() {
   var 
obj = new Editor();
    
obj.cancelEditingNumber();

so in der art.

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 03-08-2008, 18:21
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, in der Doku von "apply()" hatte ich das so verstanden, dass ich damit das this zuweisen kann. Das Problem ist, dass ich keine neue Instanz erzeugen kann, weil ich auf Instanzvariablen zugreifen muss.. Und der gepostete Code ist ja nur der Rahmen für die verschiedenen Möglichkeiten aus meinem ersten Post :-) Die funzen ja alle nicht
Mit Zitat antworten
  #6 (permalink)  
Alt 03-08-2008, 18:33
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

habe mich ehrlich gesagt, noch nie mit apply beschäftigt. allerdings hast du da imho einen konstruktionsfehler in deinem script. du hast ein objekt mit mehreren methoden:
PHP-Code:
this.editNumber
this
.hideEditing
this
.cancelEditingNumber 
jetzt greifst du innerhalb dieses objektes auf eine äußere funktion zu, die wiederum eine methode deines objektes aufruft. warum dieser umweg? du kannst doch hier direkt auf die methode zugreifen:
PHP-Code:
cancelLink.onclick = function() 
{
   
// hier auf this.cancelEditingNumber zugreifen

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #7 (permalink)  
Alt 03-08-2008, 21:25
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Ich mag die Event-Funktionen von prototype (www.prototypejs.org) sehr, vor allem, weil die bestehende onClick-Definitionen stehenlassen und dort definierte Events einfach obendrauf gereiht werden.

Aber xyz.onclick ist für den hier genannten Zweck natürlich völlig ausreichend.
Mit Zitat antworten
  #8 (permalink)  
Alt 04-08-2008, 19:46
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

danke für eure Antworten. prototype möchte ich nicht verwenden, weil es ziemlich viel Daten wären, nur um das onlick Zeug verwenden zu können :-) Außerdem muss das ja auch so gehen.

@Kropff: geht leider nicht:
PHP-Code:
cancelLink.onclick = function() {this.cancelEditingNumber();}; 
Bringt mir JS-Fehler "this.cancelEditingNumber is not a function"
Mit Zitat antworten
  #9 (permalink)  
Alt 04-08-2008, 19:49
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Benutzt Du denn "new"?
Mit Zitat antworten
  #10 (permalink)  
Alt 04-08-2008, 20:13
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hinter der letzten } der Klasse steht
PHP-Code:
var handyEditor = new HandyEditor(); 
Mit Zitat antworten
  #11 (permalink)  
Alt 04-08-2008, 20:13
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Benutzt Du denn "new"?
braucht er doch nicht. allerdings ist da ein semikolon zuviel:
PHP-Code:
cancelLink.onclick = function() 
{
  
this.cancelEditingNumber();
}; 
eigentlich sollte das so funktionieren. stell doch ein beispiel online.
EDIT:

Zitat:
Original geschrieben von strauberry
Hinter der letzten } der Klasse steht
PHP-Code:
var handyEditor = new HandyEditor(); 
jetzt zeig mal den kompletten code.


peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite

Geändert von Kropff (04-08-2008 um 20:16 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 04-08-2008, 20:18
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
function HandyEditor() {

    
this.serviceNumbers = new Array(151152157159160162163170171172173174175176177178179);

    
this.editNumber = function(uniqueIDnumber) {
    
        var 
currentEditedContainer document.getElementById('editHandy-' uniqueID);
        
        
// split up number and save it
        
numberParts number.split("-");
        if(
numberParts.length != 3) {
            
numberParts[0] = '0049';
            
numberParts[1] = this.serviceNumbers[0];
            
numberParts[2] = '';
        }
        
        
// get link element
        
var editLink currentEditedContainer.getElementsByTagName('a')[0];
        
        
// save last edited number for cancel
        
this.lastEditedNumber editLink;
    
        
// remove shown number
        
currentEditedContainer.removeChild(editLink);
        
        
// create selectbox for country
        
var countrySelect document.createElement('select');
        
countrySelect.className 'text countryNo';
        
        var 
countryOption document.createElement('option');
        
countryOption.value "0049";
        
countryOption.text "0049";
        
countryOption.selected 'selected';
        
countrySelect.options[0] = countryOption;
        
        
// create selectbox for service
        
var serviceSelect document.createElement('select');
        
serviceSelect.className 'text serviceNo';
        
        for(
0this.serviceNumbers.lengthi++) {
            
tmp document.createElement('option');
            
tmp.text this.serviceNumbers[i];
            
tmp.value this.serviceNumbers[i];
            
serviceSelect.options[i] = tmp;
        }
        
        
// create input for number
        
var numberInput document.createElement('input');
        
numberInput.className 'text numberInput';
        
        
countrySelect.id 'countrySelect_' uniqueID;
        
currentEditedContainer.appendChild(countrySelect);
        
        
// create selectbox with first part
        
serviceSelect.id 'serviceSelect_' uniqueID;
        
serviceSelect.value numberParts[1];
        
currentEditedContainer.appendChild(serviceSelect);
        
        
numberInput.value numberParts[2];
        
numberInput.id 'numberInput_' uniqueID;
        
currentEditedContainer.appendChild(numberInput);
        
        
// create cancel button
        
var cancelLink document.createElement('a');
        
cancelLink.href '#';
        
cancelLink.innerHTML 'Abbrechen';
        
cancelLink.setAttribute('onclick''handyEditor.cancelEditingNumber(); return false;');
        
currentEditedContainer.appendChild(cancelLink);
    
    }
    
    
this.hideEditing = function() {
    }
    
    
this.cancelEditingNumber = function() {
    
        var 
currentEditedContainer document.getElementById('editHandy-' uniqueID);
    
        
// remove all select boxes
        
var selBoxes this.currentEditedContainer.getElementsByTagName('select');
        
        
// remove buttons
        
        // write old value
        
this.currentEditedContainer.appendChild(this.lastEditedNumber);
    
    }

}

var 
handyEditor = new HandyEditor(); 
Hab das mit dem onclick jetzt über die setAttribute Methode gelöst. Gefällt mir nicht ganz so, aber hauptsache, es funzt erstmal. Optimieren kann ich immer noch :-)
Mit Zitat antworten
  #13 (permalink)  
Alt 04-08-2008, 20:39
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Hab das mit dem onclick jetzt über die setAttribute Methode gelöst
auch mal im ie getestet?

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #14 (permalink)  
Alt 04-08-2008, 20:42
strauberry
 Registrierter Benutzer
Links : Onlinestatus : strauberry ist offline
Registriert seit: Nov 2002
Beiträge: 616
strauberry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Fuck ne :-) Deiner Frage nach will ich das jetzt aber auch nicht mehr
Mit Zitat antworten
  #15 (permalink)  
Alt 04-08-2008, 20:44
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

mach es mal

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:40 Uhr.