Ссылка на вызывающий элемент DOM в jQuery.ajax () с dataType 'script' - PullRequest
2 голосов
/ 28 января 2010

Допустим, у меня есть следующий сценарий:

<form action="/something.php" method="GET">Click me</div>

<script type="text/javascript"><!--
    $('form').submit(function(e) {
        $.ajax({
            url: this.action,
            method: this.method,
            dataType: 'script'
        });
        return false;
    });
//--></script>

Мой вопрос относится к результату JavaScript, возвращенному something.php. Я хочу сослаться на форму. Обычно я бы ссылался через this (как я делал с this.action и this.method выше). Тем не менее, это не работает, когда я возвращаю следующее:

alert(this);  // displays: [object Window]

Похоже, что jQuery выполняет скрипт под видом окна вместо элемента, который создал событие. Есть ли способ, которым я могу легко ссылаться на объект, который создал событие, без необходимости ссылаться на идентификаторы элемента или что-либо в возвращенном JavaScript?

Ответы [ 2 ]

1 голос
/ 28 января 2010

Я обнаружил, что могу выполнить следующее, чтобы разрешить this в ответе ссылаться на вызывающий объект, но я чувствую, что это скорее взлом, чем нужно:

<form action="/something.php" method="GET">Click me</div>

<script type="text/javascript"><!--
    $('form').submit(function(e) {
        $.ajax({
            url: this.action,
            method: this.method,
            dataType: 'text',
            success: function(data) {
                eval('(function() {' + data + '}).call(this);');
            }
        });
        return false;
    });
//--></script>
0 голосов
/ 28 января 2010

попробуйте следующим образом:

EDIT:

HTML:

<div>
   <form id="myCorrectForm" action="/something.php" method="GET">
     <input type="submit" value="Click me" />
   </form>
</div>

ЯШ:

<script type="text/javascript"><!--

   // in this environment is created for the variable "frmRef" public
   var frmRef = null;
   $('#myCorrectForm').submit(function(e) {
      frmRef = $(this);
      $.ajax({
        url: frmRef.attr("action"),
        method: frmRef.attr("method"),
        dataType: 'script'
      });
      return false;
   });

//--></script> 

js in "/something.php":

alert($(window.parent.frmRef).attr('id'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...