вопрос о javascript - PullRequest
       5

вопрос о javascript

1 голос
/ 21 сентября 2010

Я написал небольшую страницу Ajax-y, которая отображает строки данных из запроса Ajax.В каждой строке есть «ссылка для удаления», позволяющая пользователю быстро удалить строку, также через ajax.

Моя проблема связана с областью действия функции -

«main»страница имеет функцию, которая выглядит следующим образом:

<script language="javascript" type="text/javascript">
window.addEvent('domready', function() {

    function getRows(){
        var myurl = 'myajaxurl.php';
            var req = new Request({
            async:false,
            method: 'get',
            url: myurl,
            data: {'id':'<?php echo $id; ?>'},
            evalScripts:true,
            onSuccess: function(response) {
                $('my_rows_div').set('html',response);
            }
        }).send();
    }

    function deleteRow(rowid){
        alert(rowid);
    }
});    

Данные, возвращаемые функцией 'getRows', представляют собой всего лишь несколько html-строк и выглядят так:

<tr><td>data</td><td><a onclick="deleteRow(1)" href="javascript:void(0);">delete</a></td></tr>
<tr><td>data</td><td><a onclick="deleteRow(2)" href="javascript:void(0);">delete</a></td></tr>

Пока все хорошо - но когда я отображаю страницу и нажимаю ссылку «удалить», я получаю сообщение об ошибке js, что «deleteRow не определен».

Я знаю, что, вероятно, что-то естьделать с областью, но я не совсем понимаю, как это работает.Как я могу ссылаться на функцию deleteRow родительской страницы из возвращенных данных ajax?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010

«Глобальная область» страницы - это объект «окна». Когда вы добавляете обработчики событий из атрибутов HTML, по умолчанию используется глобальная область. Сделайте это:

<script language="javascript" type="text/javascript">
window.addEvent('domready', function() {

function getRows(){
        var myurl = 'myajaxurl.php';
            var req = new Request({
            async:false,
            method: 'get',
            url: myurl,
            data: {'id':'<?php echo $id; ?>'},
            evalScripts:true,
            onSuccess: function(response) {
                $('my_rows_div').set('html',response);
            }
        }).send();
    }

    window.deleteRow = function(rowid){
        alert(rowid);
    }
});  
1 голос
/ 21 сентября 2010

Перемещение функции deleteRow за пределы функции getRows и перемещение обеих функций за пределы обработчика событий.

В общем случае функции Javascript должны определяться в глобальной области (или в пространстве имен);не вложено в другие функции.

...