Вариант того, который я использовал в течение довольно продолжительного времени, это:
CREATE FUNCTION [widget].[properCase](@string varchar(8000)) RETURNS varchar(8000) AS
BEGIN
SET @string = LOWER(@string)
DECLARE @i INT
SET @i = ASCII('a')
WHILE @i <= ASCII('z')
BEGIN
SET @string = REPLACE( @string, ' ' + CHAR(@i), ' ' + CHAR(@i-32))
SET @i = @i + 1
END
SET @string = CHAR(ASCII(LEFT(@string, 1))-32) + RIGHT(@string, LEN(@string)-1)
RETURN @string
END
Вы можете легко изменить для обработки символов после элементов, отличных от пробелов, если хотите.
Попробуйте что-нибудь вроде этого:
if (typeof me.onChange !== "undefined") {
// safe to use the function
}
или еще лучше (согласно комментариям UpTheCreek)
if (typeof me.onChange === "function") {
// safe to use the function
}
У меня был случай, когда имя функции менялось в зависимости от переменной (в данном случае var 'x'), добавленной к имени функции. Это работает:
if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); }
Библиотека Underscore.js определяет его в методе isFunction следующим образом (что, как предполагают комментарии, может исправить некоторые ошибки браузера)
typeof obj == 'function' || false
Я также искал изящное решение этой проблемы. После большого отражения я нашел этот подход лучше всего.
const func = me.onChange || (str => {});
func(str)
;
В нескольких словах: Поймайте Исключение.
я действительно удивлен, что никто не ответил или прокомментировал об Исключении, Завоевывают популярность это сообщение все же.
Деталь: функция ниже является примером от моей кодовой базы. Когда JavaScript не находит функцию, он должен бросить ReferenceError, который можно обработать, как Вы желаете на разделе выгоды.
function inputMask(input){
try{
let maskedInput = eval("mask_"+input.name);
if(typeof maskedInput === "undefined")
return input.value;
else
return eval("mask_"+input.name)(input);
} catch(e){
if (e instanceof ReferenceError) {
return input.value;
}
}
}
I would suspect that me
is not getting correctly assigned onload.
Moving the get_ID call into the onclick event should take care of it.
Obviously you can further trap as previously mentioned:
function js_to_as( str) {
var me = get_ID('jsExample');
if (me && me.onChange) {
me.onChange(str);
}
}
Без условий
me.onChange=function(){};
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Я сделаю еще один шаг, чтобы убедиться, что свойство действительно является функцией
function js_to_as( str ){
if (me && me.onChange && typeof me.onChange === 'function') {
me.onChange(str);
}
}
function js_to_as( str ){
if (me && me.onChange)
me.onChange(str);
}