str.format()
изменяет строку на месте, вам все еще нужно сохранить ее в переменную, попробуйте добавить str =
:
str = str.format(prim_ident,country_ident,final[0],final[1],final[2],final[3])
Я заменяю кнопку отправки на якорная ссылка. С звонка form.submit () не активируется я нахожу это, и eval () сам. Но я бы хотел проверьте, существует ли функция раньше просто eval (), что там. - gms8994
<script type="text/javascript">
function onsubmitHandler() {
alert('running onsubmit handler');
return true;
}
function testOnsubmitAndSubmit(f) {
if (typeof f.onsubmit === 'function') {
// onsubmit is executable, test the return value
if (f.onsubmit()) {
// onsubmit returns true, submit the form
f.submit();
}
}
}
</script>
<form name="theForm" onsubmit="return onsubmitHandler();">
<a href="#" onclick="
testOnsubmitAndSubmit(document.forms['theForm']);
return false;
"></a>
</form>
РЕДАКТИРОВАТЬ: отсутствует параметр f в функции testOnsubmitAndSubmit
Вышеуказанное должно работать независимо от того, назначаете ли вы HTML-атрибут onsubmit
или назначаете его в JavaScript:
document.forms['theForm'].onsubmit = onsubmitHandler;
Простая проверка, подобная этой, позволит вам узнать, существует ли она / определена:
if (this.onsubmit)
{
// do stuff;
}
if ( window.onsubmit ) {
//
} else {
alert("Function does not exist.");
}
I think the source of confusion is the distinction between a node's attribute and the corresponding property.
You're using:
$("a.button").parents("form").attr("onsubmit")
You're directly reading the onsubmit
attribute's value (which must be a string). Instead, you should access the onsubmit
property of the node:
$("a.button").parents("form").prop("onsubmit")
Here's a quick test:
<form id="form1" action="foo1.htm" onsubmit="return valid()"></form>
<script>
window.onload = function () {
var form1 = document.getElementById("form1");
function log(s) {
document.write("<div>" + s + "</div>");
}
function info(v) {
return "(" + typeof v + ") " + v;
}
log("form1 onsubmit property: " + info(form1.onsubmit));
log("form1 onsubmit attribute: " + info(form1.getAttribute("onsubmit")));
};
</script>
This yields:
form1 onsubmit property: (function) function onsubmit(event) { return valid(); } form1 onsubmit attribute: (string) return valid()
Что ж, «return valid ();»
- это строка, так что это правильно.
Если вы хотите проверить, есть ли к нему прикрепленная функция, вы можете попробовать это :
formId.onsubmit = function (){ /* */ }
if(typeof formId.onsubmit == "function"){
alert("it's a function!");
}
Если это строка, вы можете предположить / надеяться, что она всегда имеет форму
return SomeFunction(arguments);
, анализировать имя функции, а затем посмотреть, определена ли эта функция с помощью
if (window[functionName]) {
// do stuff
}
Вы можете попробовать модифицировать этот метод в соответствии с вашими потребностями:
function isFunction() {
var functionName = window.prompt('Function name: ');
var isDefined = eval('(typeof ' + functionName + '==\'function\');');
if (isDefined)
eval(functionName + '();');
else
alert('Function ' + functionName + ' does not exist');
}
function anotherFunction() {
alert('message from another function.');
}
Убедитесь, что вы вызываете typeof для фактической функции, а не строкового литерала:
function x() {
console.log("hi");
}
typeof "x"; // returns "string"
typeof x; // returns "function"
Какой браузер вы используете?
alert(typeof document.getElementById('myform').onsubmit);
Это дает me " function
" в IE7 и FireFox.
Вы можете просто использовать оператор typeof
вместе с троичным оператором для краткости:
onsubmit="return typeof valid =='function' ? valid() : true;"
Если это функция, мы вызываем ее и возвращаем ее возвращаемое значение, в противном случае просто return true
Редактировать:
Я не совсем уверен, что вы действительно хотите сделать, но я постараюсь объяснить, что может происходить.
Когда вы объявляете onsubmit
кода внутри вашего html, он превращается в функцию и, следовательно, вызывается из JavaScript-мира. Это означает, что эти два метода эквивалентны:
HTML: <form onsubmit="return valid();" />
JavaScript: myForm.onsubmit = function() { return valid(); };
Эти два будут обе функциями, и оба будут вызываться. Вы можете протестировать любого из них, используя оператор typeof
, который должен дать тот же результат: "function"
.
Теперь, если вы назначите строку для "onsubmit" свойство через JavaScript, он останется строкой, следовательно, не вызывается. Обратите внимание, что если вы примените к нему оператор typeof
, вы получите «string»
вместо «1143981]« function ».
Я надеюсь, что это может прояснить несколько вещей. Опять же, если вы хотите знать, является ли такое свойство (или какой-либо идентификатор для данного вопроса) функцией и вызываемой функцией, оператор typeof типа должен сработать. Хотя я не уверен, работает ли он правильно в нескольких кадрах.
Cheers
если вы хотите знать, является ли такое свойство (или какой-либо идентификатор для данного вопроса) функцией и возможностью вызова, оператор typeof типа должен решить эту проблему. Хотя я не уверен, работает ли он правильно в нескольких кадрах.
Cheers
если вы хотите знать, является ли такое свойство (или какой-либо идентификатор для данного вопроса) функцией и возможностью вызова, оператор typeof
типа должен решить эту проблему. Хотя я не уверен, работает ли он правильно в нескольких кадрах.
Cheers
Попробуйте
if (this.onsubmit instanceof Function) {
// do stuff;
}
form.onsubmit всегда будет функцией, если она определена как атрибут HTML элемента формы. Это какая-то анонимная функция, прикрепленная к элементу HTML, которая имеет указатель this , связанный с этим элементом FORM, а также имеет параметр с именем event
, который будет содержать данные о событии submit.
В этих условиях я не понимаю, как вы получили строку в результате операции typeof. Вы должны дать больше деталей, а лучше немного кода.
Редактировать (в ответ на ваше второе редактирование):
Я считаю, что обработчик, прикрепленный к атрибуту HTML, будет выполняться независимо от кода выше. Более того, вы можете попытаться как-то остановить это, но, похоже, что FF 3, IE 8, Chrome 2 и Opera 9 вначале выполняют обработчик атрибута HTML, а затем присоединенный (хотя я не тестировал с jQuery, но с addEventListener и attachEvent). Итак ... что именно вы пытаетесь выполнить?
Кстати, ваш код не работает, потому что ваше регулярное выражение извлекает строку «valid ();», которая определенно не является функцией.