Ответ 1
Вы можете использовать обозначение скобок для доступа к элементу со строкой, содержащей идентификатор:
var target = 'next';
$("foobar")[target](); // identical to $("foobar").next()
Можно ли вызвать функцию, используя строки?
(i.e) У меня есть переменная var target = 'next';
. Используя эту строку, я хочу вызвать метод jquery next()
. Должен ли я использовать target + '()'
(это глупо), чтобы вызвать next()
?
Я знаю, что это можно сделать с помощью операторов conditional
. Поскольку это строка, полученная от пользователей, но для всех это сложно использовать условные операторы.
В моем плагине jQuery пользователи передадут значение prev
, siblings
и т.д. в качестве параметров, так что будут обработаны соответствующие jQuery-методы.
Как это реализовать?
Вы можете использовать обозначение скобок для доступа к элементу со строкой, содержащей идентификатор:
var target = 'next';
$("foobar")[target](); // identical to $("foobar").next()
Если вы хотите использовать jQuery, ответ довольно изящный. Поскольку jQuery является объектом (к которому можно получить доступ, как массив), вы можете использовать $("selector")[target]()
.
Примеры:
var target = 'next';
jQuery("selector")[target]();
Это будет работать, если вы знаете, что можете доверять вводу. Однако, если вы не уверены в этом, вы должны проверить, существует ли функция, прежде чем пытаться ее запустить, иначе вы получите сообщение об ошибке.
var target = 'doesNotExist';
if (jQuery.isFunction(target)) {
jQuery('selector')[target]();
}
В моем случае мне нужно было получить значение из атрибута rel, а затем проанализировать его как функцию, это сработало для меня.
$jq('#mainbody form').submit(function(e){
var formcheck = $jq(this).attr('rel');
if (typeof window[formcheck] === 'function'){
formok = window[formcheck]();
e.preventDefault();
}
});
function maincheck(){
alert("Checked");
return false;
}
и форма
<div id="mainbody">
<form action="mainpage.php" method="post" rel="maincheck">
<input type="hidden" name="formaction" value="testpost">
<label>Field 1 <input type="text" name="field1" value="<?=$_POST['field1'];?>"></label><br>
<label>Field 2 <input type="text" name="field2" value="<?=$_POST['field2'];?>"></label><br>
<input type="submit" value="Submit Form">
</form>
</div>