$this передачи для функционирования

Как я могу передать $this (сам ключевое слово) к функции в JQuery

$(document).ready(function() {

    $('.nav a').click(function() {
        var direction = $(this).attr("name");
        submit_form($(this))
    }); 

    function submit_form(this)
    {
        // do some stuff with 'this'
    }       
});
11
задан Willi Mentzel 6 January 2017 в 14:36
поделиться

5 ответов

Если заключить его в $ () , он станет объектом jQuery. Вам нужно сделать что-то вроде

submit_form(this);

function submit_form(obj)
{
    // Work with `obj` as "this"
    // Or wrap it in $() to work with it as jQuery(this)
}
17
ответ дан 3 December 2019 в 04:12
поделиться

Ключевое слово this нельзя задать в JavaScript. Он автоматически генерируется JavaScript и «всегда относится к« владельцу »функции, которую мы выполняем, или, скорее, к объекту, методом которого функция является».
- http://www.quirksmode.org/js/this.html

У вас есть одна проблема в вашем коде (вы пытаетесь указать для этого параметр функции submit_form ()). Однако из того, как построен ваш код, не ясно, собираетесь ли вы передать щелкнувшую привязку, обернутую как объект jQuery или как узел DOM для привязки.

$(document).ready(function() {
    $('.nav a').click(function() {
        $anchor = $(this);                      // Capture the jQuery-wrapped anchor for re-use; 'this' is an anchor because it matched $('.nav a')
        var direction = $anchor.attr("name");   // $variable_name is a standard pattern in jQuery to indicate variables that are jQuery-wrapped instead of DOM objects

        submit_form_jquery($anchor);            // Providing versions of submit_form function for passing either jQuery-wrapped object or DOM object
        submit_form_dom(this);                  // Pick the one you prefer and use it
    }); 

    function submit_form_jquery($my_anchor) {   // Function with well-named parameter expecting a jQuery-wrapped object
        // do some stuff with '$my_anchor'
        // $my_anchor here is assumed to be a jQuery-wrapped object
    }

    function submit_form_dom(anchor) {          // Function named expecting a DOM element, not a jQuery-wrapped element
        // do some stuff with 'anchor'
        // anchor here is assumed to be a DOM element, NOT wrapped in a jQuery object
    }
});

По большей части не относящимся к делу примечанием, вы, вероятно, захотите либо вернуть false; , либо использовать event.preventDefault (), чтобы страница не следовала href на привязке, которая был нажат. Вы можете сделать это следующим образом:

$(document).ready(function() {
    $('.nav a').click(function(event) {
        event.preventDefault();
        // And now do what you want the click to do
    }); 
});
5
ответ дан 3 December 2019 в 04:12
поделиться

Попробуйте следующее:

$(document).ready(function() 
    { 
        $('.nav a').click(function()    { 
            var direction = $(this).attr("name"); 
            submit_form(this);
        });  

        function submit_form(myObject) 
        { 
            // do some stuff with 'myObject'


        }        

    }); 
1
ответ дан 3 December 2019 в 04:12
поделиться

Вот что у меня сработало.

$(document).ready(function()
{
    $('.nav a').click(function()    {
        submit_form(this)
    }); 

    function submit_form(thisObject)
    {
        var direction = $(thisObject).attr("name");
    }       
});
1
ответ дан 3 December 2019 в 04:12
поделиться

Просто передать его как обычную переменную?

function submit_form(context)
{
    context.html("Boo!");

}

/// Then when you call it:
submit_form($(this));
0
ответ дан 3 December 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: