隐藏按钮取决于textbox是否有文本和jQuery?

隐藏按钮取决于textbox是否有文本和jQuery?,jquery,Jquery,我有几个datetime选择器字段,如果其中任何字段为空,我希望Submit按钮不可见。我知道如何做到这一点,但不知道如何使按钮可见,如果所有的日期时间选择器字段包含文本 我见过Exmaple使用keyup,但当我使用日期时间选择器时,我从未将光标放在文本框中并键入内容,日期时间选择器填充字段 该按钮的名称以diidIOSaveItem结尾。我不能对日期时间选择器使用ID或名称 if ($("input[title='Target Date']").val().length < 1) {

我有几个datetime选择器字段,如果其中任何字段为空,我希望Submit按钮不可见。我知道如何做到这一点,但不知道如何使按钮可见,如果所有的日期时间选择器字段包含文本

我见过Exmaple使用keyup,但当我使用日期时间选择器时,我从未将光标放在文本框中并键入内容,日期时间选择器填充字段

该按钮的名称以diidIOSaveItem结尾。我不能对日期时间选择器使用ID或名称

if ($("input[title='Target Date']").val().length < 1)
{
$("input[name$='diidIOSaveItem']").hide();
}
else
{
$("input[name$='diidIOSaveItem']").show();
}

如果我没有在下拉列表中选择任何内容,则按钮将隐藏。但是,如果我在下拉列表中选择了某个内容,则即使datetime选择器字段为空,按钮也将可见。建议?

如果您真的希望它是即时的(任何条目都会显示出来,当您清除输入时,它就会消失),我会这样做:

$.fn.extend({
  vals: function () {
    var retVals = []; 

    this.each(function () {
      retVals.push($(this).val())
    }); 

    return retVals; 
  }
});

var myInputs = "input[title='Target Date'], input[title='Start Date'], select[title='Strategic Objective']";

$(myInputs).bind('keyup keydown change', function () {
  var entries = $(myInputs).vals();

  for (i in entries) {
    if (entries[i] == '') {
      $("input[name$='diidIOSaveItem']").hide();
      return;
    }
  }

  $("input[name$='diidIOSaveItem']").show();
}).change();

在更新的示例中,您可以使用vals()获取所有输入值的数组。为了让它与Select元素一起工作,您需要第一个选项如下:
。我认为这应该非常接近。

对于字段本身的更改,您可以随时收听事件:

$("input[title='Target Date']").bind('change keyup',function(){
  $("input[name$='diidIOSaveItem']").toggle($(this).val()!='');
});
对于字段中设置的值,在
输入
字段上触发
change()
。例如

$("#setvalue").click(function(){  
  $("input[title='Target Date']").val("hello"); // Set a value
  $("input[title='Target Date']").change(); // Force the change event
});

g.d.d.c.你好,谢谢你。但是,当页面第一次加载时,它不会隐藏按钮,除非我在字段中输入一些内容,然后将其删除。如果我有:If($($)($input[title='Target Date'])==''{$($input[name$='diidIOSaveItem']).hide();}$($input[title='Target Date']).bind($keyup-keydown-change',function(){$($input[name$='diidIOSaveItem']).hide();}否则{$($input[name$='diidIOSaveItem']).show());是的,但我能不能用更好的方式?谢谢。@peter-如果您将整个内容放在
$()
附件中,以便在呈现页面后进行绑定,则可以在绑定页面后触发其中一个绑定事件。我已经更新了示例。那么如果我有几个datetime picker Fielf?例如:$($input[title='Start Date']).bind('keyup keydown change',函数(){if($(this.val()=''){$($input[name$='diidIOSaveItem']).hide();}else{$($input[name$='diidIOSaveItem']).show();}.change()$(“input[title='Target Date']).bind('keyup keydown change',function(){if($(this).val()=''){$('input[name$='diidIOSaveItem']).hide();}else{$('input[name$='diidIOSaveItem']).show();}).change();我在两者中输入数据,在两者中删除数据,然后在其中添加数据按钮变得可见,如果我有一个下拉列表,我想我可以做一些类似的事情:$(“选择[title='Strategic Objective']).bind('change',function(){if($(this).val(0)){$('input[name$='diidIOSaveItem'])。hide();}else{$('input[name$='diidIOSaveItem'])).show();}}).change();但是它不起作用,有什么想法吗?@peter-我发现,当元素具有复合条件时,扩展jQuery以拥有VAL方法会有所帮助。另外,请参阅我关于使您的选择生效的说明
$(this).val(0)
将Select的值设置为0(如果没有此值的选项,则不起作用)。如果要将值与某个值进行比较,则需要执行
(this).val()==0
$("#setvalue").click(function(){  
  $("input[title='Target Date']").val("hello"); // Set a value
  $("input[title='Target Date']").change(); // Force the change event
});