将变量传递给 jQuery 插件参数

Posted

技术标签:

【中文标题】将变量传递给 jQuery 插件参数【英文标题】:Passing variable to jQuery plugin parameter 【发布时间】:2016-11-08 22:04:16 【问题描述】:

我在弄清楚如何将变量传递给ajaxForm() 函数的参数时遇到了问题。单击 jQuery 中的表单按钮后,我从隐藏的表单字段获取 templatedir 路径(这很好用),我可以将它传递给其他函数,但不能传递给 ajaxForm() 参数:

    var templatedir;

    // Get variable of templatedir
    $('form#contact input[type="submit"]').on('click',function()
        templatedir = $('input[name=templatedir]').fieldValue();   
    );

    // Validate Form
    function validateform(formData, jqForm, options)          
        ...
        // IF I CALL TEMPLATEDIR HERE IT WORKS
       

    // Send to phpMailer
    $("form#contact").ajaxForm(
        url: templatedir, // IT DOESNT WORK HERE
        type: 'post', 
        beforeSubmit: validateform,
        target: '#msg',
        clearForm: true
    );

如您所见,我尝试了此答案 (How do i pass variables between functions in javascript) 中的解决方案,但它不起作用。

【问题讨论】:

嗯...是这样吗? templatedir = $('input[name=templatedir]').fieldValue(); 是的,这是正确的,我可以将结果传递给console.log,它工作得很好。 【参考方案1】:

您的变量 templatedir 未定义。

你应该在点击事件中调用ajaxForm()

$('form#contact input[type="submit"]').on('click',function(event) 
    event.preventDefault();

    // Send to PHPMailer
    $("form#contact").ajaxForm(
        url: $('input[name=templatedir]').fieldValue(),
        type: 'post', 
        beforeSubmit: validateform,
        target: '#msg',
        clearForm: true
    );
);

【讨论】:

【参考方案2】:

兴趣点是:

在设置之前不能使用 templatedir 变量

templatedir = $('input[name=templatedir]').fieldValue(); 更改为

templatedir = $('input[name=templatedir]').val();

删除url: templatedir, // IT DOESNT WORK HERE并将其设置在validateform中:在表单提交之前

我的sn-p:

var templatedir;

$(function () 
  $('form#contact input[type="submit"]').on('click', function()
    templatedir = $('input[name=templatedir]').val();
  );
  function validateform(formData, jqForm, options) 
    // because you now are in the beforesubmit event
    // you can change the url.....
    options.url = templatedir;
  

  $("form#contact").ajaxForm(
    type: 'post',
    beforeSubmit: validateform,
    target: '#msg',
    clearForm: true
  );
);
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
<script src="https://malsup.github.io/jquery.form.js"></script>

<form id="contact" action="www.google.com" method="post">
    templatedir: <input type="text" name="templatedir"/>
    <input type="submit" value="Submit Comment" />
</form>
<div id="msg"></div>

【讨论】:

以上是关于将变量传递给 jQuery 插件参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个 PHP 变量传递给 jQuery 函数?

使用 jquery 将模板变量传递给 django url

jQuery Ajax 帖子未传递参数

ISO8859_1中的Jquery AJAX传递变量

使用jQuery AJAX将字符串数组传递给具有可变数量参数的webmethod

在 jQuery 插件中传递参数是啥意思?