Ich habe schon eine Weile nach einer Antwort auf diese Frage gesucht, aber noch keine Lösung gefunden. Ich muss ein Objekt an eine Funktion übergeben, die "onChange" ausgelöst wird, wenn eine Auswahloption von einem Benutzer ausgewählt wird. Der aktuelle Code ist:Übergabe der Objektvariable an onchange-Ereignis JS
selecter.onchange = function(){
var runScript = $("#actionSel option:selected").attr('script');
console.log(runScript);
eval("("+runScript+")();");
}
Die Absicht ist es, eine Funktion innerhalb des „Skript“ speichern attr die Optionen, die dann ausgeführt werden, wenn diese Option ausgewählt ist. Für eine meiner Funktionen muss ich jedoch eine Variable aus dem übergeordneten Bereich übergeben, um mit dem Server über Websockets interagieren zu können.
Die Funktion im „Script“ Attribut gespeichert ist:
function(){ popConfirm("Restore User","Do you really want to restore the selected users? This will un-delete the selected deleted users.",function(r){ if(r)restoreUser(r,io); });
Im Wesentlichen überprüft diese mit dem Benutzer, die sie tun wollen, was sie ausgewählt haben, dann übergibt das Ergebnis meiner Benutzerfunktion wiederherzustellen. Es muss auch das Objekt "io" weiterleiten. Allerdings bekomme ich einen Fehler, der besagt, dass io nicht definiert ist.
Alle Ideen wären sehr hilfreich. Vielen Dank!
Wie gewünscht, hier sind einige zusätzliche relative Teile des Codes, die zeigen, wo IO eingeführt wird.
AdminIO = new io(servPath);
AdminIO.on('send_users',function(rows){
toggleLoad();
appendUsers(rows,AdminIO);
});
Innerhalb appendUsers gibt es eine weitere Funktion, die die Auswahlliste und seine Optionen, dropActions kompiliert(), wobei die selector.onchange und anderes Stück, das ich vor geschrieben werden eingeführt. Die selector.onchange ist Teil der Funktion, die die Dropdown-Liste erstellt. Die Funktion() {popConfirm()} wird als Funktion hinzugefügt, die bei Auswahl dieses Elements ausgeführt wird. Die Funktion zum Erstellen der Liste lautet:
dropActions = function(bActions, lActions, options){
// bActions = {id: myID, text: "this is my action", elem: document.getElementById('getDiv'), action: function(){ /*mycode here */}}
// lActions = {text: "select me to run an action", action: function(){ /*mycode here */}}
bActions = bActions || null;
lActions = lActions || null;
options = options || {elem: document.body, id: null};
if(!bActions && !lActions){ console.error("No actions added or available."); return; }
var
selID = options.id,
starter = (selID) ? document.getElementById(selID) : options.elem,
optsBar = document.createElement("header"),
selecter = document.createElement("select");
starterSel = document.createElement("option");
optsBar.id = "actionSelH";
starterSel.innerText = "More Actions";
starterSel.setAttribute('script','javascript:void(0)');
selecter.id = "actionSel";
selecter.appendChild(starterSel);
for(var i= 0; bActions.length > i; i++){
var
buttonText = bActions[i].text,
buttonID = bActions[i].id || 'ACT'+i,
buttonAction = bActions[i].action,
button = document.createElement('div');
button.id = buttonID;
button.classList.add("actionButton");
button.innerText = buttonText;
button.onclick = buttonAction;
optsBar.appendChild(button);
}
for(var i= 0; lActions.length > i; i++){
var selText = lActions[i].text,
selScript = lActions[i].action,
option = document.createElement('option');
option.innerText = selText;
option.setAttribute('script',selScript);
selecter.appendChild(option);
}
selecter.onchange = function(){
var runScript = $("#actionSel option:selected").attr('script');
console.log(runScript);
eval("("+runScript+")();");
}
optsBar.appendChild(selecter);
$(optsBar).insertBefore('#user_list_table');
//$('#user_list_table').after(optsBar);
//$(starter).prepend(optsBar);
},
Hoffentlich hilft mehr Kontext!
Ist es Ihnen möglich, die Funktion direkt zu übergeben in JavaScript ohne Verwendung von HTML? – gcampbell