模糊上的Javascript绑定,都是';如果索引为';和';其他';表演

模糊上的Javascript绑定,都是';如果索引为';和';其他';表演,javascript,jquery,if-statement,indexof,onblur,Javascript,Jquery,If Statement,Indexof,Onblur,HTML <!-- Contents of div #1 --> <form id="6hgj3y537y2biacb"> <label for="product_calendar" class="entry_label">Calendar</label> <input type="text" name="product_calendar" class="entry" value="" /> </form>

HTML

<!-- Contents of div #1 -->
<form id="6hgj3y537y2biacb">
    <label for="product_calendar" class="entry_label">Calendar</label>
    <input type="text" name="product_calendar" class="entry" value="" />
</form>
<form id="pyc2w1fs47mbojez">
    <label for="product_calendar" class="entry_label">Calendar</label>
    <input type="text" name="product_calendar" class="entry" value="" />
</form>
<form id="kcmyeng53wvv29pa">
    <label for="product_calendar" class="entry_label">Calendar</label>
    <input type="text" name="product_calendar" class="entry" value="" />
</form>

<!-- Contents of div #2 -->
<div id="calendar_addRemove"> <!-- CSS >> display: none; -->
    <div id="calendar_add">
        <label for="calendar_add" class="calendar_addLabel">Add Occurrence</label>
        <input type="text" name="calendar_add" class="calendar_addInput" value=""/>
    </div>
    <div id="calendar_remove">
        <label for="calendar_remove" class="calendar_removeLabel">Remove Occurrence</label>
        <input type="text" name="calendar_remove" class="calendar_removeInput" value=""/>
    </div>
</div>

历法
历法
历法
添加事件
删除事件
Javascript

// Complete behavioral script
$(function() {
    $('input[name=product_calendar]').css({ 'color': '#5fd27d', 'cursor': 'pointer' }).attr({ 'readonly': 'readonly' }); // Additional formatting for specified fields
    $('input[name=product_calendar]').focus(function() { // Focus on any 'input[name=product_calendar]' executes function
        var product_calendar = $(this); // Explicit declaration
        var attr_val = $(product_calendar).attr('value');
        $('#calendar_addRemove input').attr({ 'value': '' }); // Clear input fields
        $('#calendar_addRemove').fadeIn(500, function() { // Display input fields
            $('input[name=calendar_add]').blur(function() { // After value entered, action occurs on blur
                alert('Blur'); // Added for testing
                var add_val = $('input[name=calendar_add]').attr('value');
                if (add_val != '') {
                    alert('Not Blank'); // Added for testing
                    var newAdd_val = attr_val + ' ' + add_val;
                    $(product_calendar).attr({ 'value': newAdd_val });
                    $('#calendar_addRemove').fadeOut(500);
                    }
                else {
                    alert('Blank'); // Added for testing
                    $('#calendar_addRemove').fadeOut(500);
                    }
                });
            $('input[name=calendar_remove]').blur(function() { // After value entered, action occurs on blur
                alert('Blur'); // Added for testing
                var remove_val = $(this).attr('value');
                if (remove_val != '') {
                    alert('Not Blank'); // Added for testing
                    if (attr_val.indexOf(remove_val) != -1) {
                        alert('Eval True'); // Added for testing
                        var newRemove_val = attr_val.replace(remove_val, '');
                        $(product_calendar).attr({ 'value': newRemove_val });
                        $('#calendar_addRemove').fadeOut(500);
                        }
                    else {
                        alert('Eval False'); // Added for testing
                        $('#calendar_remove').append('<p class="error">Occurrence Not Found</p>');
                        $('.error').fadeOut(1500, function() { $(this).remove(); });
                        }
                    }
                else {
                    alert('Blank'); // Added for testing
                    $('#calendar_addRemove').fadeOut(500);
                    }
                });
            });
        });
    });
//完整的行为脚本
$(函数(){
$('input[name=product_calendar]').css({'color':'5fd27d','cursor':'pointer'}).attr({'readonly':'readonly'});//指定字段的其他格式
$('input[name=product\u calendar]')。focus(函数(){//focus on any'input[name=product\u calendar]'执行函数
var product_calendar=$(this);//显式声明
var attr_val=$(产品日历).attr('value');
$(#calendar_addRemove input').attr({'value':''})//清除输入字段
$('#calendar_addRemove').fadeIn(500,function(){//显示输入字段
$('input[name=calendar\u add]')。模糊(函数(){//输入值后,对模糊执行操作
警报('Blur');//添加用于测试
var add_val=$('input[name=calendar_add]')。attr('value');
如果(添加值!=''){
警报('notblank');//为测试添加
var newAdd_val=attr_val+“”+add_val;
$(产品日历).attr({'value':newAdd\u val});
$('日历添加删除').fadeOut(500);
}
否则{
警报('Blank');//为测试添加
$('日历添加删除').fadeOut(500);
}
});
$('input[name=calendar_remove]')。模糊(函数(){//输入值后,对模糊执行操作
警报('Blur');//添加用于测试
var remove_val=$(this.attr('value');
如果(删除值!=''){
警报('notblank');//为测试添加
如果(属性值索引)(删除值)!=-1){
警报('Eval True');//为测试添加
var newRemove_val=attr_val.replace(remove_val.);
$(产品日历).attr({'value':newRemove\u val});
$('日历添加删除').fadeOut(500);
}
否则{
警报('Eval False');//为测试添加
$(“#calendar_remove”)。追加(“

未找到出现的事件”

”; $('.error').fadeOut(1500,函数(){$(this.remove();}); } } 否则{ 警报('Blank');//为测试添加 $('日历添加删除').fadeOut(500); } }); }); }); });
我添加了一些警报以查看此脚本的执行顺序。当我在
input[name=calendar\u add]
中输入
1234
并模糊时,警报会按预期出现。然后,当我继续并在
input[name=calendar\u remove]
中输入
1234
和blur时,该脚本按以下顺序发出警报:blur、Not Blank、Eval False、blur、Not Blank、Eval True-如果我重复此过程,我的警报每次都会加倍(添加和删除),但顺序不变(好像是成套的)


我认为问题是在DOM中重新声明变量
attr\u val
,但我不太确定如何修改脚本来缓解这个问题。

没有。这是不可能的

因此,有一些可能的原因看起来是这样的:

  • 实际运行的代码与此不同。它可能是缓存的旧版本,或者您正在查找错误的文件

  • 代码运行不止一次,这样两个执行分支都可以运行

  • 您误解了结果,并且无论您看到什么导致必须执行两个分支的结论,实际上都是由其他代码引起的

您可以使用调试器在代码中设置断点。在条件之前设置一个断点,在每个分支中设置一个断点。然后您将看到代码是否运行两次、一次或根本不运行

编辑: 添加到代码中的警报显示事件实际上被调用了两次,第一次调用的值与您认为的值不同

添加一些代码以尝试找出从何处调用事件。通过将事件对象添加到函数签名中来捕获它:
.blur(function(e){
。然后可以使用e.currentTarget获取触发事件的元素,并显示它的一些属性(如它的id)来标识它

编辑2: 我对这一行很好奇:

$(product_calendar).attr({ value: newRemove_val });
您是在某处创建变量
product\u calendar
,还是指:

$('input[name=product_calendar}').attr({ value: newRemove_val });
编辑3: 看到完整的代码,双重执行的原因很清楚。您甚至在事件处理程序中添加了处理程序,这意味着每次都会添加另一个处理程序

attr\u val
无法正常工作的原因是,它在一个函数中作为局部变量创建,然后在另一个函数中不可见

改为从开始添加模糊处理程序,它们只出现一次。在函数外部声明变量

一些注意事项:

  • 您可以使用
    val
    函数,而不是使用
    attr
    函数访问
    value
    属性
  • 当您将
    $(this)
    分配给
    product\u calendar
    时,它是一个jQuery对象。您不必使用
    $(product\u calendar)
  • 删除操作与完整值不匹配,因此您可以添加
    12
    2
    ,然后删除
    2
    ,得到
    1
    2
    
    // Complete behavioral script
    $(function() {
    
      // declare variables in outer scope
      var attr_val;
      var product_calendar;
    
      $('input[name=product_calendar]')
        .css({ 'color': '#5fd27d', 'cursor': 'pointer' })
        .attr('readonly', 'readonly') // Additional formatting for specified fields
        .focus(function() { // Focus on any 'input[name=product_calendar]' executes function
          product_calendar = $(this); // Explicit declaration
          attr_val = product_calendar.val();
          $('#calendar_addRemove input').val(''); // Clear input fields
          $('#calendar_addRemove').fadeIn(500); // Display input fields
        });
    
      $('input[name=calendar_add]').blur(function() { // After value entered, action occurs on blur
        var add_val = $(this).val();
        if (add_val != '') {
          product_calendar.val(attr_val + ' ' + add_val);
        }
        $('#calendar_addRemove').fadeOut(500);
      });
    
      $('input[name=calendar_remove]').blur(function() { // After value entered, action occurs on blur
        var remove_val = $(this).val();
        if (remove_val != '') {
          if (attr_val.indexOf(remove_val) != -1) {
            product_calendar.val(attr_val.replace(remove_val, ''));
            $('#calendar_addRemove').fadeOut(500);
          } else {
            $('#calendar_remove').append('<p class="error">Occurrence Not Found</p>');
            $('.error').fadeOut(1500, function() { $(this).remove(); });
          }
        } else {
          $('#calendar_addRemove').fadeOut(500);
        }
      });
    
    });
    
        $(function() {
        var product_calendar = null;
    
        $('input[name=product_calendar]').css({ 'color': '#5fd27d', 'cursor': 'pointer' }).attr({ 'readonly': 'readonly' }); // Additional formatting for specified fields
    
        $('input[name=calendar_add]').blur(function() { // After value entered, action occurs on blur
            alert('Blur'); // Added for testing
            var add_val = $('input[name=calendar_add]').attr('value');
            if (add_val != '') {
                alert('Not Blank'); // Added for testing
                var attr_val = $(product_calendar).attr('value');
                var newAdd_val = attr_val + ' ' + add_val;
                $(product_calendar).attr({ 'value': newAdd_val });
                $('#calendar_addRemove').fadeOut(500);
            }
            else {
                alert('Blank'); // Added for testing
                $('#calendar_addRemove').fadeOut(500);
            }
        });
    
        $('input[name=calendar_remove]').blur(function() { // After value entered, action occurs on blur
            alert('Blur'); // Added for testing
            var remove_val = $(this).attr('value');
            if (remove_val != '') {
                alert('Not Blank'); // Added for testing
                var attr_val = $(product_calendar).attr('value');
                if (attr_val.indexOf(remove_val) != -1) {
                    alert('Eval True'); // Added for testing
                    var newRemove_val = attr_val.replace(remove_val, '');
                    $(product_calendar).attr({ 'value': newRemove_val });
                    $('#calendar_addRemove').fadeOut(500);
                }
                else {
                    alert('Eval False'); // Added for testing
                    $('#calendar_remove').after('<p class="error">Occurrence Not Found</p>');
                    $('.error').fadeOut(1500, function() { $(this).remove(); });
                }
            }
            else {
                alert('Blank'); // Added for testing
                $('#calendar_addRemove').fadeOut(500);
            }
        });
    
        $('input[name=product_calendar]').focus(function() { // Focus on any 'input[name=product_calendar]' executes function
            product_calendar = $(this);
            $('#calendar_addRemove input').attr({ 'value': '' }); // Clear input fields
            $('#calendar_addRemove').fadeIn(500);
            });
        });