2012-10-16 87 views
10

我正在写一个jquery插件来创建为我的应用程序设计的ajax调用。jQuery自动检测,如果我需要使用.html()或.val()

里面这个插件,我的AJAX调用看起来像这样(减少的问题需要什么):

$.ajax({ 
     url: route, 
     type: "post", 
     data: inputData, 
     success: function(response, textStatus, jqXHR) { 
      if (outputSelector !== undefined) { 

       $(outputSelector).html(response); 
       // or 
       $(outputSelector).val(response); 

      } 
     } 
    }); 

outputSelector是一种选择,插件之外定义。我不知道这个选择器是<div>还是<input>甚至<select>。有没有一种智能的方法来知道我是否需要使用val()或html()?

+2

可以将您的选择器是一个任意的,例如''div,输入,选择“'? –

+0

是的,它可能是 –

+0

这是你得到的回应的结构?你能举个例子吗? – svillamayor

回答

12

也许我们可以检查,如果该元素具有value属性:

var el = $(outputSelector); 
if (el[0].value !== undefined) { 
    el.val(response); 
} else { 
    el.html(response); 
} 

所以,有点像一条线通用的解决方案可能是:

$(outputSelector).each(function() { 
    this[this.value !== undefined ? "value" : "innerHTML"] = response; 
}); 
+0

这个解决方案会更容易维护,然后可能更新开关语句或'.is()'选择器。唯一需要注意的是,如果你可能有一个选择器,Álvaro在注释中提到(''div,input,select''),你可能需要在逗号中加上'.split()'并单独检查每个元素。 – kmfk

+0

你的方式工作得很好,[jsfiddle](http://jsfiddle.net/HCCsD/)。谢谢。在'.each()'中,我将能够处理多个选择。 –

+1

@Ninsuo如果有很多输出元素,你可以使用'$(outputSelector).each(function(){if(this.value!== undefined){...}});',就像[xdazz] (http://stackoverflow.com/a/12919512/1249581)提出。 – VisioN

2

可以使用.is(..)方法,以确定哪些方法使用。

$.ajax({ 
    url: route, 
    type: "post", 
    data: inputData, 
    success: function(response, textStatus, jqXHR) { 
     if (outputSelector !== undefined) { 
      var $output = $(outputSelector), 
       method = $output.is('input,select,textarea') ? 'val' : 'html'; 

      $output[method](response); 
     } 
    } 
}); 
0

里面你的成功的功能,放:

if (outputSelector !== undefined) { 
    if(outputSelector.is("input")) 
    { 
     outputSelector.val(response); 
    } 
    else if (outputSelector.is("div")) 
    { 
     outputSelector.html(response); 
    } 
} 

这将是更好的语法使用switch语句,但是如果你认为只有输入将用于val(),一切是html()然后只需用else替换最后的else if并删除条件。

4

如果outputSelector是类选择器,且元素是混合类型,则需要使用.each。 尽管将divinput与同一个类混合并不好,但是如果要创建插件,则需要考虑这种情况。

$(outputSelector).each(function() { 
    if ('value' in this) { 
     $(this).val(response); 
    } else { 
     $(this).html(response); 
    } 
}); 
1

你可以同时使用.prop()方法来确定一个属性是一个给定的选择定义:

if ($(outputSelector).prop("value") !== undefined) 
    $(outputSelector).val(response); 
else 
    $(outputSelector).html(response); 

EXAMPLE

另外,您可以我们.hasOwnProperty()

相关问题