jQuery .on('change',function(){}不触发动态创建的输入

时间:2012-11-16 14:51:38

标签: javascript jquery

问题在于我有一些动态创建的输入标签集,而且我还有一个功能,可以在输入值发生变化时触发。

$('input').on('change', function() {
  // Does some stuff and logs the event to the console
});

但是,.on('change')不会触发任何动态创建的输入,仅适用于加载页面时存在的项目。不幸的是,由于.on.live().delegate()的替代,所有这些都是.bind()的包装,因此这让我有点绑定:/ {/ p >

是否有其他人遇到此问题或知道解决方案?

8 个答案:

答案 0 :(得分:232)

您应该为on功能提供一个选择器:

$(document).on('change', 'input', function() {
  // Does some stuff and logs the event to the console
});

在这种情况下,它会按预期工作。此外,最好指定一些元素而不是文档。

阅读本文以便更好地理解:http://elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/

答案 1 :(得分:18)

使用此

public function infoRoute(Request $request)
    {
        // Get info
        $ship_id = $request->ship_id;
        $startDate = $request->datepicker_start;
        $endDate = $request->datepicker_end;

        // Get all the locations between those dates
        $routeArray = $this->measurementRepository->getCoordinates($ship_id, $startDate, $endDate);

        $ship = $this->shipRepository->getShipForId($ship_id);
        $info = $this->createRouteArrayForShip($ship, $routeArray);

        if($request->ajax()) {
            return response()->json(json_encode($info));
        }
    }

    protected function createRouteArrayForShip($ship, $routeArray)
    {
        $info['type'] = "showRoute";

        $index = 0;

        foreach($routeArray as $coordinates)
        {
            $info['info']['route']['loc'. $index] = $coordinates;
            $index++;
        }

        $info['info']['shipInfo'] = $ship;

        //dd($info);
        return $info;
    }

答案 2 :(得分:8)

您可以采用任何一种方法:

$("#Input_Id").change(function(){   // 1st
    // do your code here
    // When your element is already rendered
});


$("#Input_Id").on('change', function(){    // 2nd (A)
    // do your code here
    // It will specifically called on change of your element
});

$("body").on('change', '#Input_Id', function(){    // 2nd (B)
    // do your code here
    // It will filter the element "Input_Id" from the "body" and apply "onChange effect" on it
});

答案 3 :(得分:2)

只是澄清一些潜在的混淆。 这仅在DOM加载时存在元素时才有效:

$("#target").change(function(){
    //does some stuff;
});

稍后动态加载元素时,您可以使用:

$(".parent-element").on('change', '#target', function(){
   //does some stuff;
});

答案 4 :(得分:2)

$(document).on('change', '#id', aFunc);

function aFunc() {
  // code here...
}

答案 5 :(得分:1)

$("#id").change(function(){
    //does some stuff;
});

答案 6 :(得分:1)

您可以使用“ input”事件,该事件在元素获得用户输入时发生。

$(document).on('input', '#input_id', function() {
  // this will fire all possible change actions
});

w3的文档

答案 7 :(得分:1)

您可以使用:

$('body').ready(function(){
   $(document).on('change', '#elemID', function(){
      // do something
   });
});

对我有用。