Вы можете просто использовать оператор typeof
вместе с троичным оператором для краткости:
onsubmit="return typeof valid =='function' ? valid() : true;"
Если это функция, мы вызываем ее и возвращаем возвращаемое значение, в противном случае просто возвращаем true
Edit:
Я не совсем уверен, что вы действительно хотите сделать, но я постараюсь объяснить, что может происходить.
Когда вы объявляете свой код onsubmit
в своем html, он превращается в функцию и, следовательно, вызывается из JavaScript-мира. Это означает, что эти два метода эквивалентны:
HTML: <form onsubmit="return valid();" />
JavaScript: myForm.onsubmit = function() { return valid(); };
Эти две функции будут обе, и обе будут вызываться. Вы можете протестировать любой из них, используя оператор typeof
, который должен дать тот же результат: "function"
.
Теперь, если вы назначите строку свойству "onsubmit" через JavaScript, она останется строкой и, следовательно, не будет вызываться. Обратите внимание, что если вы примените к нему оператор typeof
, вы получите "string"
вместо "function"
.
Надеюсь, это прояснит несколько вещей. Опять же, если вы хотите знать, является ли такое свойство (или какой-либо идентификатор по данному вопросу) функцией и возможностью вызова, оператор typeof
должен решить эту проблему. Хотя я не уверен, работает ли он правильно в нескольких кадрах.
Приветствия