Это то, что я не думаю, что не может быть сделано, или не может быть сделано легко.
Подумайте об этом, у вас есть кнопка внутри div в HTML, когда вы нажимаете на нее, вы вызываете функцию php через AJAX, я хотел бы отправить элемент, который запускает событие click (или любой элемент в качестве параметра) в PHP и обратно в JS, таким же образом, как serialize () в PHP, чтобы иметь возможность восстановить элемент в JS.
Позвольте привести простой пример:
PHP:
function ajaxCall(element){
return element;
}
JS:
callbackFunction(el){
el.color='red';
}
HTML:
<div id="id_div">
<input type="button" value="click Me" onClick="ajaxCall(this, callbackFunction);" />
</div>
Так что я вещь в 3 методах
метод 1.
Я могу дать каждому элементу на странице идентификатор.
поэтому вызов Ajax будет выглядеть так:
ajaxCall(this.id, callbackFunction);
и функция обратного вызова будет:
document.getElementById(el).color='red';
Этот метод мне кажется сложным, поскольку на большой странице сложно отследить все идентификаторы.
метод 2.
Я думаю, что использование xPath может быть сделано, если я могу получить точный путь к элементу, и в функции обратного вызова оцените этот путь для достижения элемента. Этот метод нуждается в поиске, это всего лишь идея.
метод 3.
Измените мои функции AJAX, чтобы он сохранил элемент, который запустил событие, и передал его функции обратного вызова в качестве аргумента, когда что-то возвращается из PHP, поэтому в моем AJAX будет выглядеть так:
eval(callbackFunction(argumentsFromPhp, element));
и функция обратного вызова будет:
callbackFunction(someArgsFromPhp, el){
el.color='red';
// parse someArgsFromPhp
}
Я думаю, что третий вариант - мой выбор, чтобы начать этот эксперимент.
Кто-нибудь из вас лучше знает, как мне это сделать?
Спасибо.
EDIT:
Предыдущий пример не сложен, на этот раз я попробую лучшее объяснение.
PHP:
function phpFunct($age){
$text='';
if(!is_numeric($age)){
$t['alert'] = 'You filled an invalid age !';
return $t;
}
// Can be lots of code ...
$text.='Your age is '.$age;
$t['#myDiv'] = $text;
return $t;
}
JS:
function callback(x){
for(i in x){
if(i == 'alert'){
// Alert if something went wrong.
alert(x);
} elseif(){
// ... more options, promts, console.log's ...etc
}else{
// Simple innerHTML
$(i).val(x);
}
}
}
phpFunct(){
x_phpFunct($('#age').val(), callback); //call PHP function via AJAX
}
HTML:
<div id="myDiv">
<input type="text" id="age" /><br />
<input type="button" value="getSomethingFromPhp" onCLick="phpFunct();" />
</div>
Я хотел бы иметь возможность сделать что-то вроде этого:
HTML:
onClick="phpFunct(this.parentNode);"
JS:
phpFunct(el){
x_phpFunct(el, $('#age').val(), callback);
}
PHP:
phpFunct($el, $age){
...
$t[$el] = 'Your age is '.$age;
return $t;
}
Это можно сделать, если у вас есть идентификатор для каждого элемента, и передать этот идентификатор в PHP и обратно. Я знаю, что это не "законно", но теперь мой идентификатор не уникален. Я использую DIV как обертки и все, что внутри DIV имеют уникальные идентификаторы (это как использование DIV в качестве тела, много страниц, открытых одновременно, много тел). И если вы достигнете элемента, вы всегда будете знать, кто является родителем этого элемента.