2013-11-04 41 views
0

我在我的WordPress插件的设置页面中使用了jQuery ajax表单插件。在开始使用ajax之前,我有这个脚本将文本输入值与占位符值进行了比较,如果它们匹配,则将文本输入值设置为null。但是现在我不再使用ajax了。使用jQuery ajax表单插件,我可以在beforeSerialize函数或beforeSubmit函数中传递参数。我认为这需要在beforeSerialize中完成。无论如何,我不知道如何使这项工作。这是我之前切换到AJAX是正在操作的脚本:忽略ajax表单上的占位符值提交

$('[placeholder]').focus(function() { 
    var input = $(this); 
    if (input.val() == input.attr('placeholder')) { 
     input.val(''); 
     input.removeClass('placeholder'); 
    } 
}).blur(function() { 
    var input = $(this); 
    if (input.val() == '' || input.val() == input.attr('placeholder')) { 
     input.addClass('ssfa-placeholder'); 
     input.val(input.attr('placeholder')); 
    } 
}).blur().parents('form').submit(function() { 
    $(this).find('[placeholder]').each(function() { 
     var input = $(this); 
     if (input.val() == input.attr('placeholder')) { 
      input.val(''); 
     } 
    }) 
}); 

,这里是我的ajax的形式,当前脚本提交:

var svn = $("#ssfa-saving"), 
bck = $("#ssfa-saving-backdrop"), 
svd = $("#ssfa-settings-saved"); 

$("#ssfa-form").ajaxForm({ 
    beforeSend: function() { 
     svn.fadeIn('slow'); 
     bck.fadeIn('fast'); 
    }, 
    success: function(){ 
     svn.fadeOut('slow'); 
     svd.delay(1000).fadeIn('slow').delay(2500).fadeOut('slow'); 
     bck.delay(4500).fadeOut('slow'); 
    } 
}); 

任何想法如何,我可以得到AJAX提交(或者beforeSerializebeforeSend)忽略占位符值?上面的第一个脚本是定期提交邮件的一个非常简单的解决方案。我希望我能找到一样简单的Ajax。

UPDATE

我摸索出做它的一个基本方式,但它需要调用具有占位每个文本字段,所以它不是完全优雅像原来的剧本,但这个功能:

$("#ssfa-form").ajaxForm({ 
    beforeSerialize: function() { 
     var permex = $('input#exclusions'); 
     $('input[id^=bs]').each(function(){ 
      var bs = $(this); 
      if (bs.val() === 'Display Name') 
       bs.removeAttr('value'); 
     }); 
     $('input[id^=custom_]').each(function(){ 
      var cs = $(this); 
      if (cs.val() === 'classname1|Display Name 1, classname2|Display Name 2') 
       cs.removeAttr('value'); 
     }); 
     if (permex.val() === '.avi, My Embarrasing Photograph, .tif') 
      permex.removeAttr('value'); 
    }, 

    beforeSend: function() { 

    etc. 

而且由于它是一个占位符文本,当value属性被删除时,文本并不会真正消失,所以没有人真的更聪明。我不是这个月亮,但它的工作原理。如果我有更大的表单,这是不可行的。

打开以更好的想法....

回答

0

嗯,我发挥它周围相当多,发现一种方式来获得原始代码使用Ajax的工作提交。其实很简单。我只需指定要在其中搜索占位符attr的元素。那就是:

 beforeSerialize: function() { 
      $("#ssfa-form").find('[placeholder]').each(function() { 
       var input = $(this); 
       if (input.val() == input.attr('placeholder')) { 
        input.val(''); 
       } 
      }) 
     }, 
     etc. 

要跟踪的问题,请参见:

https://github.com/mathiasbynens/jquery-placeholder/issues/30 https://github.com/mathiasbynens/jquery-placeholder/issues/197