Solved

Problems with function literal used as DWR callback.

Posted on 2007-12-03
4
945 Views
Last Modified: 2008-02-27
I have written a piece of code to be executed on form submit. The code consists of a containing object called EventHandler which handles both initialisation and execution of event handlers.

I use prototype for the eventhandling code. The problem is that the property error of type StringBuffer (another object) does not play well with the function literal myCallback (which is invoked by DWR).

I want to store all validation errors in the error property for access later but neither of the two versions I have attached the code to does the trick for me. I am guessing it has to do with the scope in JavaScript but I can't pinpoint the problem.

Any help greatly appreciated!
//
//Invoked by
//
Event.observe(matchPlayerFormId, 'submit', this.formSubmit.bind(this));
 
//
//Version 1
//
EventHandler.prototype.formSubmit = function(event) {
	this.error = new StringBuffer();
 
	var myCallback = function(data){
		console.log("in callback, result = '" + data + "'");
		if (data.length > 0) {
			this.error.append(data);
			console.log("Intermediate: " + error.toString());
		}
	};
 
	for (var i = 0; i < this.validationNodes.length; i++){
		var variableId = this.validationNodes[i].id;
			
		var variableName = this.validationNodes[i].name;
	
		var variableValue = document.getElementById(variableId).value;
		
		JMatchValidator.validate(variableName, variableValue, myCallback.bind(this));
 
	}
		
	if (this.error.length() > 0){
		console.log("Submit cancelled");
		Event.stop(event);
		
	}
}
 
//
//Version 2
//
EventHandler.prototype.formSubmit = function(event) {
	var error = new StringBuffer();
 
	var myCallback = function(data){
		if (data.length > 0) {
			error.append(data);
		}
	};
 
	alert("Start submit");
	for (var i = 0; i < this.validationNodes.length; i++){
		var variableId = this.validationNodes[i].id;
			
		var variableName = this.validationNodes[i].name;
	
		var variableValue = document.getElementById(variableId).value;
 
		JMatchValidator.validate(variableName, variableValue, myCallback.bind(this));
 
	}
		
	if (error.length() > 0){
		console.log("Submit cancelled");
		Event.stop(event);
		
	}
}

Open in new window

0
Comment
Question by:kveasana
4 Comments
 
LVL 29

Accepted Solution

by:
Badotz earned 500 total points
ID: 20524057
// Try this:
//
var self = this;
JMatchValidator.validate(variableName, variableValue, myCallback.bind(this, self));

// I have noticed that "bind" drops the first object from the argument list
// The first object bwcomes the object that is "called"
0
 
LVL 1

Expert Comment

by:Computer101
ID: 20999905
Forced accept.

Computer101
EE Admin
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

JavaScript can be used in a browser to change parts of a webpage dynamically. It begins with the following pattern: If condition W is true, do thing X to target Y after event Z. Below are some tips and tricks to help you get started with JavaScript …
These days, all we hear about hacktivists took down so and so websites and retrieved thousands of user’s data. One of the techniques to get unauthorized access to database is by performing SQL injection. This article is quite lengthy which gives bas…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question